MFC界面开发中,习惯了使用控件,亦或者是自绘制控件来美化界面,但操作起来繁琐,还不太美观。DirectUI的出现,对于界面开发,给了我们一个新的选择,目前很多公司使用了该技术对其产品进行了美化,效果还是可以得到肯定的。
接下来,分析一下DirectUI可以完成哪些功能,可以简化哪些操作。以及该项技术的关键点技术。
界面完全换肤
完全焕肤问题,虽然传统的哦MFC也可以获取窗体句柄等器件对窗体样式大小进行修改定制,但是这操作起来会有很多的类以及对象,首先在内存上也会占用很多,其次操作上也有些混乱。
而DirectUI这里的“界面完全换肤”,是指用户可完全定制化的换肤,软件界面控件大小,位置等都可能有变化等。DirectUI界面库一般都是用XML定义界面虚拟控 件并直接布局界面,因此可以实现此功能。但实际上完全的换肤涉及到很多问题,目前很少有界面库产品可以实现这种完全换肤。从界面设计的发展来看,目前已经 不流行这种界面的完全换肤,因为这不仅对技术要求比较多,同时也对UI设计要求很高。目前界面换肤大量采用的是更换色调,局部的背景更换(如MSN/QQ最新版本)。
理论上更高的效率
由于在DirectUI控件中,更多的控件为逻辑上的虚拟控件。因此理论上来讲DirectUI运行效率会更高一些,但这个效率也与DirectUI界面 库整体的软件架构及软件实现有密切关系。在实际考虑时,效率问题应该不是关注的重点,因为目前设计及实现良好的Win32 界面库在效率方面也没有任何问题。只是实现技术上难度高了些。
容易实现更加炫丽的动态效果
由于DirectUI的技术特点,使其更容易实现一些特效的动画效果,如菜单的动态徐徐展开和收缩,窗口的动态渐隐渐显的弹出和关闭,控件的动画展开和关闭。当然以上这些特性也取决于开发团队的技术实力,同时也需要顶尖优秀的UI设计师配合,方能带来所期望的炫丽效果。
防止软件被破解,防外挂
众多知名互联网公司不遗余力研发DirectUI 界面,这一点也是重要考量。传统的Win32控件由于其消息、原理公开,使得通过一些简单的Hook或其他方式可以很容易破解软件。而一个完全的 DirectUI界面,其界面元素及内部逻辑完全为私有实现,外界无从得知。这就使得破解变得困难的多。充分利用了类的安全性 性能优势。
界面与逻辑的完全分离(需要完整脚本支持)
在说明这个问题前,我们来了解这个基本问题:
什么是界面与逻辑的分离?
分离的目的是为了简化程序猿的操作复杂度。
界面是指涉及界面元素操作的部分代码,比如控件位置大小,控件的状态;窗口的大小;控件界面的绘制代码;控件的动态创建。
逻辑是指软件的程序逻辑,与界面操作完全无关,如网络操作,内部事件与消息。
在Win32控件或者MFC等设计里,实际上是将界面和程序逻辑完全糅合在一起,这样做的缺陷在于如果界面UI设计有一些改变,我们可能要大面积的修改程 序代码并重新编译,同时程序也难以重用,我们可能需要重载好多类如CCongfigButton,CSettingButton,CXXXButton 等。每一个新的界面效果的增加,我们都需要去修改程序,添加支持。
目前来说,基于Win32的大部分界面库已经能最大限度的分离界面与逻辑,最主要的是将界面控件的绘制代码分离出去,使得应用程序变得更加清晰,更加容易维护,容易重用;也能很容易适应界面UI设计的变化。
什么是界面与逻辑的完全分离?
完全分离是指程序中不出现任何界面控件元素属性的相关操作,如调整界面控件位置,控制控件的显示/隐藏。即在不重新编译程序的情况下,仅通过修改界面配置文件(XML)和脚本文件,即可加载一个新的界面效果。
理论上来说,Win32控件库不能做到界面与逻辑的完全分离。比如MFC框架,更是将界面与逻辑完全融合在一起。这也是很多大的互联网公司花重金研发完全 的DirectUI界面引擎的原因,这类公司基本都是快速开发模式,产品更新快,界面UI设计更新快,常常一个软件开发出来,皮肤已经换了好几套了,界面 调整无数次了。如果采用传统的方式,这里面会带来巨大的工作量及重复工作。
以上几点是一个基于DirectUI技术的界面库可以实现的,但基于Win32控件的界面库难以实现的。但同时我们也会发现,还没有一个通用的 DirectUI界面库产品中实现以上所有特性;即DirectUI的真正优势还未能在实践中实现。以下的关键点是一个完整,通用的DirectUI界面 库难以实现的原因。
DirectUI界面框架开发的关键点
一些知名的互联网公司不但在自己的DirectUI系统中深度整合脚本语言,在脚本语言的选择上也在变化,之前常用的是vbscrip/jsscript语言,目前多使用lua脚本语言,lua脚本为开源项目,其特点是灵活,高效,容易扩展。
摘录修改自:http://blog.csdn.net/a199228/article/details/7027717。谢谢原作者。