DirectUI技术

释意:

将所有的控件都绘制在一个窗口上,这些控件的逻辑和绘图方式都必须的自己进行编写和封装,所以这些控件都是无句柄的。

DirectUI技术的实现步骤和难点:
1、窗口的子类化,截获窗口的消息。
2、封装自己的控件,并将自己的控件绘制到该窗口上
3、封装窗口的消息,并分发到自己的控件上,让自己的控件根据消息进行相应和绘制
4、根据不同的行为发送自定义消息给窗口,以便程序进行调用。
5、一般窗口上控件的组织使用XML来描述。

做DirectUI的公司如下:

1. www.uipower.com 上面有很多的DirectUI相关技术介绍和视频教程,他们的DirectUI产品网站 www.directui.com
上面有控件下载和一个演示Demo,目前好像没有提供试用版,不过可以借鉴不少东西,这个公司也就是做skin++的。

八卦一下,directui.com的DirectUI是从微软DirectUI部门跳过来,在directui.com任技术总监的吴总做的架构与设计。

八卦的来源:http://topic.csdn.net/u/20100319/16/a6a98242-5e7d-431f-a338-7e1b1c650575.html

2.http://www.uieasy.cn

3.http://www.xcgui.com  炫彩界面库 说是永久免费,产品下载地址:http://www.xcgui.com/bbs/viewthread.php?tid=17&extra=page%3D1

4.http://code.google.com/p/duilib/ 极有可能发展成为一股非常强大的DUI开源力量

为了表扬,特截个demo图:

 DirectUI技术_第1张图片


DirectUI Demo

一、简介

DirectUI技术说白了就是XML配置文件+图片+JavaScript控制界面。这点与网页css+图片+JavaScript十分相似,就是如开发网页一般开发桌面程序界面,这个开发效率当然大大的提高。将程序员从繁琐的界面绘制工作中解脱出来,专心开发逻辑代码。还能大大减少代码量,因为据统计,传统MFC程序中,界面代码大约占总代码的1/3强!也就是说,这个1/3的代码都可以由xml+javascript替代!

同理,如果网页开发时,每个图片都需要由web程序绘制,你能想象一个网页的代码量有多少吗?

简直不能想象,而传统Window程序就是如此!

DirectUI技术最早被用于window xp资源管理器左边栏,被称为task folder.而DirectUI被广为国人所知,还得感谢腾讯公司。QQ2009的界面就是使用DirectUI技术开发的。类似的有微软的MSN,OCS和百度Hi。最近的Office2007 Ribbon界面,如果使用Spy++查看,可以见到一个名为”NetUI”的窗口,其实这也是微软内部DirectUI的一个变种。不过无论是微软,腾讯,还是百度,都使用了DirectUI技术来开发自己的软件界面,却不肯将其公开。

二.背景

与DirectUI最相似的要数微软最近推出的WPF,其设计思想是相同的。只不过WPF只能运行于托管环境下。window下的C++程序员一直呼吁微软推出native WPF,也就是非托管的WPF。不过微软给出的答案是:NO。所以WPF将定位于为.NET战略服务。使用WPF开发的界面程序,必须带上庞大的.NET运行环境。不过随着Window 7的普及,这个状况会有所改变(window 7继承了.NET环境)。

不过,我想,如果许多公司的产品都是需要支持Window XP(最少QQ现在还是支持Window 2000),所以WPF不是桌面应用程序界面开发的首选。

DirectUI界面库:

取名自微软的一个窗口类名“DirectUIHWND”,意为Paint on parent dc directly。即子窗口不以窗口句柄的形式创建,只是逻辑上的窗口,绘制在父窗口之上。微软的“DirectUI”技术广泛的应用于Window XP系统,Media Player播放器,即时通讯工具MSN Messager。

传统的window界面,是用户窗口的层次排列,这种方式有很多局限性。目前的开发环境我们可以很快的使用win32控件构造出标准的干净的界面,但是我们同时也会立刻意识到如果我想像界面更加漂亮,更加炫一点就比较麻烦了。Windows控件提供的Custom-Draw/Ower-Draw技术局限太多,基本上没有透明等效果支持,同时控件布局方面也比较古板。

DirectUI界面库使用XML来描述界面风格,界面布局,使用脚本语言(如vbscript,javascript,lua)等来作为界面元素和程序逻辑的交互。从这方面来看,DirectUI界面库可以看成是一个迷你的微软WPF,mozilla XUL,或者Adobe的Flex,这些平台代表的应用程序的发展方向,同时也有很多相似的架构,比如多采用类似XML的方式描述定义界面,使用脚本语言(xul使用javascript,flex使用Action Script)来作为控制界面元素并和程序逻辑之间交互。DirectUI 界面库采用相似的设计,使用xml描述界面,同时使用javascript,或者vbscript来作为界面和逻辑的粘合。在控件设计方面,DirectUI界面库更多的融入了XUL,WPF,Flex等控件设计理念,并没有一味的照搬window标准控件,以期望其成为一款真正使用实用的界面库。

这种界面库设计的最大的好处在于可以很方便的构建高效,绚丽的,非常易于扩展的界面。国外如微软,国内如腾讯,百度等公司的客户端产品多采用这种方式来组织界面,从而很好的将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色,换肤,透明等。 DirectUI 界面库旨在满足客户端界面快速开发的需要,同时融入业界前沿的皮肤技术,为用户创建更加高效,专业的界面。
其他特性:
* 使用xml配置界面控件布局
* 使用脚本(vbscript, jscript)控制控件属性,响应事件
* 使用xml描述界面风格
* XML语法简单,易于学习和掌握
* 基于Win32 API,没有framework依赖。
* 支持改变皮肤色调
* 支持大多数控件透明,包括子窗口透明
* 支持png, bitmap, gif, ico图片格式。支持带透明通道的png图片

DirectUI例子代码:http://www.viksoe.dk/code/windowless1.htm

你可能感兴趣的:(DirectUI技术)