转自http://note.sdo.com/u/icez/n/mvO-X~jyVnpFnM01A0000m

DirectUI意为直接在父窗口上绘图(Paint on parent dc directly)。即子窗口不以窗口句柄的形式创建(windowless),只是逻辑上的窗口,绘制在父窗口之上。微软的“DirectUI”技术广泛的应用于Windows XP、Vista、Windows 7,如浏览器左侧的TaskPanel,控制面板导航界面,Media Player播放器,即时通讯工具MSN Messager等。

DirectUI好处在于可以很方便的构建高效、绚丽的、非常易于扩展的界面。国外如微软,国内如腾讯、百度等公司的客户端产品多采用这种方式来组织界面,从而很好的将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色、换肤、透明等。

DirectUI可以理解为一个轻量级的WPF,可以让C++做出C#般绚丽的界面。目前国内做DirectUI皮肤库的公司主要有两家:第一家是UIPower(即Skin++的公司),网址www.uipower.com,其DirectUI产品网站www.directui.com,做的很专业;另一家是UIEASY,网址www.uieasy.com,一个轻量级皮肤库DSkinLite。但是,网上关于DirectUI的技术文章却很少;早在 6/26/2005,一个国外的程序员就已经写了一个开源的DirectUI例子,应该算是国内所有directui界面库的起源了,网址http://www.viksoe.dk/code/windowless1.htm,探讨一种实现的可能性和思路,和实际应用虽有一定距离,不过却是一个很好的学习资料。再后来,一个国内的程序员“当个傻瓜蛋”,基于此代码,进行重构和修正Bug,并放到了google上开源,网址http://code.google.com/p/duilib/,下载地址svn checkout http://duilib.googlecode.com/svn/trunk/ duilib-read-only。

本人通过学习这个duilib的源代码,学到了很多知识、思路和经验,分享给看到此文的朋友,共同探讨DirectUI技术,并欢迎大家加入到开发开源DirectUI皮肤库的行列当中。分析难免有误,见谅!

一、核心类
1.        CWindowWnd,窗口对象管理父类,主要作用:

  1)        创建窗口。

  2)        窗口消息过程处理。

  3)        提供窗口子类化与超类化接口。

2.        CDialogBuilder,控件布局类,主要作用:

  1)        读取XML脚本,分析脚本,构建控件树。

  2)        创建控件对象。

3.        CPaintManagerUI,窗口消息及图形绘制管理器类,与窗口绑定,主要作用:

  1)        绘制控件。

  2)        消息管理。

  3)        事件通知。

4.        INotifyUI,事件通知抽象类,主要作用:

  1)        重载Notify虚函数,处理事件通知。

二、控件类
1.        CControlUI,控件管理父类,主要作用:

  1)        控件的通用基类,提供控件通用属性管理。

2.      CLabelUI,静态标签类,父类CControlUI。

3.      CButtonUI,按钮类,父类CLabelUI。

4.      COptionUI,选择按钮类,父类CButtonUI。

5.      CTextUI,静态文本类,父类CLabelUI。

6.      CProgressUI,进度条类,父类CLabelUI。

7.      CSliderUI,父类CProgressUI。

8.      CEditUI,编辑框类,父类CLabelUI。

9.      CListUI,列表框类,父类CVerticalLayoutUI、IListUI。

  1) CListHeaderUI,父类CHorizontalLayoutUI。

  2) CListHeaderItemUI,列表头类,父类CControlUI。

  3) CListTextElementUI,类表文本类,父类CListLabelElementUI。

  4) CListLabelElementUI,父类CListElementUI。

10.    CComboUI,组合框类,父类CContainerUI、IListOwnerUI。

11.    CActiveXUI,ActiveX控件类,父类CControlUI、 IMessageFilterUI。

12.    CContainerUI,容器类,父类CControlUI、IContainerUI。

13.    CTabLayoutUI,选项页布局类,父类CContainerUI。

14.    CTileLayoutUI,父类CContainerUI。

15.    CDialogLayoutUI,对话框布局类,父类CContainerUI。、

16.    CVerticalLayoutUI,垂直布局类,父类CContainerUI。

17.    CHorizontalLayoutUI,水平布局类,父类CContainerUI。

18.    CListExpandElementUI,父类CListTextElementUI。

19.    CListContainerElementUI,父类CContainerUI、IListItemUI。

三、辅助类
       1.        CStdPtrArray,指针数组。

  2.        CStdValArray,数据数组。

  3.        CStdString,字符串数组。

  4.        CStdStringPtrMap,字符串指针映射数组。

 
 
 

最新文章

  1. 向Java技术进军
  2. Saving the entire git diff between two commits in a text file
  3. 一致性hash算法详解
  4. GJM : 数据结构学习笔记
  5. java httpclient发送json 请求 ,go服务端接收
  6. FZU 2105 Digits Count(线段树)
  7. 怎么在Form1调用Form2中的成员?
  8. Ehcache(07)——Ehcache对并发的支持
  9. java 写文本文件
  10. group By 和 Union 、 Union all的用法
  11. python中对文件、文件夹的操作需要涉及到os模块和shutil模块。
  12. (2)ES6解构赋值-数组篇
  13. bash脚本条件测试总结
  14. Python后台开发Django( 模板 与 值匹配 )
  15. vue组件里定时器销毁问题
  16. 阿里云Ubuntu安装图形界面与中文语言包
  17. java多线程中的调度策略
  18. 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec
  19. Linux 命令详解(六)Linux 守护进程的启动方法
  20. redis 持久化 AOF和 RDB 引起的生产故障

热门文章

  1. poj 3278 Catch That Cow 优化深搜
  2. Nginx - Additional Modules, Limits and Restrictions
  3. 和阿文一起学H5--如何把H5压缩到最小
  4. Linux c字符串中不可打印字符转换成16进制
  5. Mac OSX用终端检测文件的sha1值
  6. (转)Redis 集群方案
  7. nodejs7.0 试用 async await
  8. stl的实现原理简单讲解,通熟易懂
  9. VS2005上一个坑:关于pch 的 error C1023
  10. 关于mysql group_concat 不能显示为空的列的其他信息