Skip to content

Feature support

suhao edited this page Feb 12, 2018 · 1 revision
  • 最小依赖:超强的兼容性和性能绝对优势。采用Windows SDK,STL,JS/LUA,XML,ZIP,RenderEngine等技术实现了无依赖的DLL库
  • 支持Alpha混合:Alpha混合在GDI中的效率是比较低下的,所以在算法方面,采用了MMX优化AlphaBlend指令、多核CPU多线程同步混合和脏区域局部更新机制来解决原有GDI函数效率低下的问题,在DirectX与OpenGL绘图引擎中,主要采用脏区域局部更新与多线程纹理绘制来提升总体性能。经过优化后性能提升预计10倍左右
  • 高速渲染引擎:绘图引擎采用纯虚的图像设备上下文来对各种图像渲染引擎进行全面的支持。Virtual RenderDC将各种图像与文字的处理设计成各种类,并将每个类的方法设计成纯虚函数。如果要支持例如DirectX绘图引擎,只需要将那些纯虚的各种类与接口实现即可。所以通过该机制DirectUI实现了多渲染引擎的支持
  • 界面与业务逻辑分离:界面抽象层UAL
  • 3D界面引擎:控件元素均为3D坐标系值,平面窗口改变为三维可旋转窗口,多视角操作界面
  • 架构:平台+插件,布局特效控件均为插件
  • 多线程
  • 动态引擎:GDI、DirectX、OpenGL
  • 插件支持,插件式控件管理:一个界面库好不好很大程度上取决于是否有足够丰富的控件。而如何管理数量众多的控件并且保证用户在发布时只会打包用到的一些控件。这就给界面库的架构提出了一个全新的挑战。第一代(比如BCG、CodeJock等)和第二代(Skin++)的界面库都是铁板一块,把所有的功能都放在一起,这样用户发布时必须带上很大的DLL。在互联网客户端应用中是特别不合适的,因为软件开发商都会为软件的体积承担流量的成本。所以DirectUI对可以扩展的部件采用了插件式的管理,控件就是一种可扩展非常强的一类部件。插件式管理的好处是即插即用,易于维护,易于升级,易于独立开发,对平台的依赖性小等。DirectUI提供了VS2003-VS2010的控件开发向导。用户可以很方便地使用该向导开发出满足DirectUI规则的控件。所谓控件,其实就是一堆属性、一堆绘图、一堆事件的集合。而DirectUI平台把所有控件都经常用到的这些属性规则、绘图规则、事件规则统一抽象为各种控件开发可用的工具集。所以控件开发人员只需专注于控件的界面逻辑,并调用平台提供的这些工具集中的某些小工具,即可以很容易的地实现出各种功能的控件。与传统的开发自定义控件相比,DirectUI提供的控件开发规则要容易的多,而且不容易出错,确保运行的好效果
  • 脚本绑定:js、lua、python、ruby等
  • 界面制作工具
  • 控件多种布局:在传统的界面开发方式下,控件的布局一般通过相对于当前窗口的绝对坐标与WM_SIZE事件处理函数中计算控件的相对位置来进行控制。这种方式的弊端:灵活性不够。如果需要调整多个控件的布局位置,需要修改资源窗口上面控件的位置或OnSize处理函数中的相应参数(这种方式是不可见状态下的调整,想要看调整效果必须编译运行当前程序,一个控件的位置调整会反复多次的修改、运行查看,再修改、再运行查看的过程)。这样会给软件开发维护带来很大的不便。DirectUI在可视化开发工具DirectUIBuilder环境下提供了4大类布局控件:HorzLayout,VertLayout,GridLayout,DockLayout。用户可以根据自己应用的需要扩展新的布局控件。采用系统提供的几大类布局控件,可以所见即所得地轻松完成各种复杂的布局应用。这样的布局一般独立于程序的代码,给软件的开发与维护提供了极大的方便。如果用户需要在程序运行过程中根据相应的界面逻辑或业务逻辑进行布局参数的动态设定,DirectUI提供了布局控件的接口与方法,用户可以调用相应的接口方法对参数等进行动态的修改与应用。支持多种灵活的布局控件是第三代自定义界面开发工具的一大标志。唯有布局的丰富才能最大程度上简化控件之间的层次关系
  • 最小的内存占用:共享资源方式、动态压缩使用频次低的图像、按需加载、显卡缓存纹理等。切图指导,窗口布局、控件选择等优化方案
  • 内置组件:二进制共享,一处编码到处可用
    1. Kernel组:包含常用的15个左右的控件,如Button、CheckBox、RadioBox等,一般的应用都需要用到该组的大多数控件。虽然这里控件是用户最常见的,但它们的功能已经远远超出Windows自带标准控件的功能,也超出VB、Delphi、C#等开发工具自带的控件。比如Button的五种状态、图标显示、文字样式、旋转、异型区域感应等特性都充分挖掘了界面领域的需求。
    2. Office组:包含与办公软件相关的控件,如Taskpanel、Ribbon、OutlookBar等,在开发办公类的软件中,这些控件比较常用。在一般软件的设置页面也经常用到Taskpanel与OutlookBar两种类型的控件
    3. Advanced组:包含相对比较高级的控件应用,比如滚动精灵、字幕控件等。在一些高交互性界面中会用到它们
    4. Industry组:包含与工业软件相关的控件,比如电压表、温度计等
    5. 随着时间的推移,DirectUI将推出更多种类的内置控件。当然用户也可以根据自己的需求,创建自己的分组,构建属于用户公司或产品领域特有的控件。比如证券行业的股票行情控件。DirectUI控件的优点在于它具有二进制共享的特点,所以一次编写控件到处使用的想法可以很好的得以支持
  • 多图片格式:png、tga、bmp、jpg等。DirectUI属于2D绘图类界面库,其最重要的特性是支持Alpha混合。各种控件与动画都以图层的形式存在,可以很容易的制作出各种酷炫的效果。所以基于此,DirectUI首先得支持PNG、TGA两种带透明通道的图像格式。对于界面背景层一般都采用不带透明通道的位图Bitmap来实现。所以它还支持BMP、JPG格式。根据我们的界面开发项目的实践情况来看,用到最多的是PNG格式,而该格式的图像在内存占用上会消耗与BMP同样大小的空间。在绘图效率上也还有很大的提升的空间。基于此,DirectUI在性能要求比较高的领域采用自主研发的UI特有的图像专利格式:SPP。该格式具有支持高速图像渲染、内存占用小等优点。经过综合测试,spp格式要比普通图像格式的性能提高5倍。DirectUI自带一个小工具可以将PNG、TGA、BMP等图像格式自动转换为SPP格式,该工具还可以从SPP格式转换成其原有的图像格式
  • 多图层模式支持:支持渲染图层,空间维度上进行层次渲染叠加
  • 控件换肤:任何一款软件大致可以分为两大界面部分,一部分是自定义界面为主的主界面,另外一部分是标准控件为主的软件配置界面与Windows系统通用的窗口(MessageBox、打开文件对话框、颜色选择对话框、字体选择对话框等)。虽然DirectUI的重点是方便用户构建自定义界面,但它也兼顾了标准控件部分。因为对于一款软件来说,界面的高度一致性是用户评价其用户体验的首要标准。如果一个软件的主界面开发的再完美,而弹出的系统窗口的色调、样式与主界面格格不入,那么该软件也称不上优秀。DirectUI采用主题导入的方式让用户快速生成标准控件的皮肤,从而最大程度地方便用户制作高度风格统一的皮肤文件。DirectUI内置的标准控件换肤功能在不需要用户代码干预的情况下可以自动对该软件进程内的系统窗口及其控件进行换肤。当然根据用户的界面需求,也可以很方便地让DirectUI不要自动对系统窗口及控件进行换肤,只需在OpenSkin的最后一个参数中设置为FALSE即可
  • 多语种支持:提供多国语言的功能。用户只要在多语种管理窗口中添加某个国家的语言就可以具有相应该国语言的支持。用户根据控件的ID标识来对文本进行相应翻译。当皮肤保存后,DirectUI将会自动在该皮肤文件所在的目录生成与皮肤名称同名的XXXLang.xml.该文件是随皮肤文件一起发布出去,最终用户也可以根据语种的需求,添加新国家语种。也可以修改原有语言翻译的不恰当之处。软件开发工程师可以通过DirectUI提供的接口来获取目前皮肤中有多少个语种,名称分别是什么等信息。然后将这些信息添加到软件的主菜单中,供用户选择。当用户选中了某项语言,开发人员可以调用DirectUI内部的一个API函数:SetCurrentLanguage(xxxx)。程序会动态切换当前的语言。并且界面没有闪烁现象。值得一提的是,DirectUI的每种语言的文本字体可以单独设置,这是一般传统界面开发所无法轻易实现的。比如英文的字体采用Arial可能比较合适,而中文的字体则采用微软雅黑则比较合适。这样按语言分别设置还可以避免各种语言操作系统下出现乱码的情况
  • 随意模式类换肤:将界面和业务逻辑分离更彻底。DirectUI提供了主题的功能。用过QQ、MediaPlay的用户都对换肤充满了好奇,其实同样是换肤也有不同的方式。QQ的方式是固定模式类换肤,而MediaPlay的方式是随意模式类换肤。简单的说,固定模式类换肤只对控件所用的图片、文字、颜色、大小等做改变,而随意模式类换肤,则在固定模式类的基础上还可以对控件的类型、布局做随意的调整。就是说随意模式类只要控件将业务逻辑层所需的接口方法与事件方面的保持不变,其他的都可以更换。所以随意模式类的换肤把界面与业务逻辑分离更加彻底,而固定模式类换肤则界面与业务逻辑相对耦合还比较紧密。DirectUI就是属于随意模式类的主题管理方式。DirectUI的主题文件也称为皮肤文件,扩展名为skn.用户可以程序运行过程中动态切换skn文件,这样DirectUI可以动态切换到新界面主题下工作。给用户呈现一个比较震撼的换肤效果
  • PSD创意库: 做过界面开发的朋友都有一个体会,做好界面必须满足以下3大要素:界面设计图、界面开发工具、界面开发人员。而界面最终呈现给用户的效果与交互体验很大程度上依赖于好的界面设计。而如何设计出一款好的界面效果,一般只能请专业的UI设计公司去制作,目前市场上收费都比较贵。也许为了一个特别重要的软件项目可以勉强去购买这样的设计,但对于日益界面需求旺盛的一般性的软件项目来说,频繁购买这样的UI设计服务,从经济成本上还是从时间成本上都不是长久之计。所以,如果有几十套甚至上百套的控件创意可供选择的话,对于用户界面开发的工作将大有裨益。一来节约UI设计成本,二来节约界面设计的时间,还可以很好地保证界面设计的效果。控件创意库将是一个未来UI领域必将经历的,也是改变目前UI设计市场高风险高投入的战略性变革者。那么大家可能会问,如果有很多个创意放在一个界面上,颜色或某些细节不协调怎么办?关于这点,DirectUI为大家考虑到了,它采用PSD格式作为创意库的文件格式。PSD是一个可修改的图像文件格式。当用户从工具面板中选择不同的控件创意到窗口上以后,可以将当前窗口导出为一张PSD大图。UI设计师或略通Photoshop的软件工程师可以调整这张PSD大图,可以修改配色,也可以修改控件的大小,还可以添加新的图层,当然还可以修改已有图层的样式。DirectUI定期向用户发送最新的PSD创意库文件。用户可以加载到DirectUIBuilder中进行使用。简单的说,有了PSD创意库,一般的用户可以不再为UI设计犯愁。大集团的用户可以组织自己的UI设计师打造自己公司特色的PSD创意库,因为创意库的机制是开发式的,用户可以随意添加自己喜欢的创意。传统的界面开发模式是UI设计师制作效果图->切图->软件工程师调用相应的图片对界面进行拼装。而采用DirectUI以后的界面开发模式则是UI设计师往PSD创意库(类似于仓库)里面不断地添加新的创意,一旦有项目需求时,软件工程师一般都是从创意库中去取满足项目需求的创意。这样可以大大缩短项目界面开发的进度。另外对用户单位的UI设计师的要求也大为降低。由原先的要掌握所有UI元素的设计到可以只会精通一种类型元素的设计,可以很好的规避UI设计师人员流动所导致的诸多风险。PSD创意库的出现是UI设计向新时代变革的一个重要标志
  • 64位操作系统支持:随着目前电脑硬件的配置不断升级,内存由原来的512M一直发展到目前2G成为标配,目前超过4G的电脑也在不断增加。特别是在某些行业(比如视频非编行业),则需要对很多的大文件一起加载到内存里面进行处理,此时用户需要软件支持超越2G的内存访问能力,所以必须将软件设置为64位的开发模式。如果作为界面库无法访问超越2G的内存的能力的话,由于用户的应用软件已经占用2G内的内存,势必会导致界面库无法再申请到2G内的内存,软件最终将导致无法使用。DirectUI从ver3.5开始建立了64位支持的开发规范,比如LONG必须使用LONG_PTR,SetWindowLong必须使用SetWindowLongPtr等
  • 动态色调变化:DirectUI可以支持类似于QQ一样的动态色调变换的功能,另外还支持局部色调变换。为什么要局部变换色调?在有些应用场合,某些用户的Logo属于企业VI标志是不允许随便更改颜色与质感的。还有些界面元素的设计,比如某些图标也是不能随便修改颜色的。DirectUI提供了局部设置更改颜色的功能,而且可以对文字进行分别的颜色动态变换。从细节与专业性角度讲,DirectUI的色调变换更贴近界面实际需求本身,最大限度地满足用户对界面变换的色调的需求同时也不会破坏UI原则性的问题
  • DPI动态调整:当用户在调整Windows的DPI参数时,一般采用Windows标准控件的界面会自动进行大小与控件上面文字大小的调整。而经过自绘的控件则不会。所以这也是国内外大多数界面库所忽略的地方。虽然该项功能对电脑用户使用的不算很普及,但对于某些特殊的应用比如视频监控在电视机上运行的控制界面和某些特殊人群,比如年龄稍大而视力不是很好的人来说,DPI的设置却是相当重要的。DirectUI由于采用直接绘图方式的工作原理,所有的图像大小与文字大小都由几个关键函数执行,所以实现图像的动态缩放将是轻而易举的。它默认就是支持该项自适应DPI的设定。当然如果用户希望软件的界面不随DPI的改变而改变的话,可以调用DirectUI里面的API函数就可以将该项功能关闭
  • Unicode支持:软件一般不存在国界限制,只要满足Windows标准,在任何国家的电脑上都可以正常运行。所以一般的软件开发商都很注重软件的多语种支持。然而要支持多语言就必须考虑Unicode。DirectUI对Unicode从2个方面进行支持。第一、从用户可以调用到的接口方法,用户既可以调用多字节的方法,也可以调用宽字符的方法,而这样的调用不需要用户明确指定,通过TCHAR的形式做自动的条件转换。所以对用户来说,只要像调用Windows标准的API函数一样使用就可以了。第二、DirectUI所生成的皮肤文件SKN与多语种配置文件xxxLang.xml都是Unicode编码格式(UTF-8)的。指的一提的是,DirectUI内部全部采用宽字符的形式来运行的,因为对于Windows 2000以后的系统内核都已经全部采用宽字符执行模式了。所以以宽字符执行可以省去很多字符转换所消耗的CPU时间。这是DirectUI高性能开发中的一大特色
Clone this wiki locally