转自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,字符串指针映射数组。

 
 
 

Duilib介绍以及各个类的简介的更多相关文章

  1. InheritableThreadLocal类原理简介使用 父子线程传递数据详解 多线程中篇(十八)

      上一篇文章中对ThreadLocal进行了详尽的介绍,另外还有一个类: InheritableThreadLocal 他是ThreadLocal的子类,那么这个类又有什么作用呢?   测试代码 p ...

  2. cesium核心类Viewer简介

    1.简单描述Viewer Viewer类是cesium的核心类,是地图可视化展示的主窗口,cesium程序应用的切入口,扮演必不可少的核心角色. 官网的英文解析如下: A base widget fo ...

  3. 反射 介绍System.Type类

    本节先介绍system.Type类,通过这个类可以访问关于任何数据类型的信息. 1. system.Type类以前把Type看作一个类,但它实际上是一个抽象的基类.只要实例化了一个Type对象,实际上 ...

  4. 18、面向对象基本原则及UML类图简介

    18.1.面向对象基本原则 18.1.1.面向抽象原则 抽象类特点: a.抽象类中可以有abstract方法,也可以有非abstract方法. b.抽象类不能用new运算符创建对象. c.如果一个非抽 ...

  5. cesium 之核心类 Viewer 简介篇

    前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 简 ...

  6. istringstream、ostringstream、stringstream 类介绍 和 stringstream类 clear函数的真正用途

    istringstream.ostringstream.stringstream 类介绍 和 stringstream类 clear函数的真正用途 来源: http://blog.csdn.net/T ...

  7. Map.Entry 类使用简介(转)

    Map.Entry 类使用简介(转)   你是否已经对每次从Map中取得关键字然后再取得相应的值感觉厌倦?使用Map.Entry类,你可以得到在同一时间得到所有的信息.标准的Map访问方法如下: Se ...

  8. JavaACOFramework的各个类介绍(part1 : Ant类)

    public abstract class Ant extends Observable implements Runnable { public static int ANT_ID = 1; // ...

  9. Uml学习-类图简介

    类图(Class Diagram)简介  类图是面向对象分析(OOA,Object-Oriented Analysis)和面向对象设计(OOP,Object-Oriented Deisgn)思想的重要 ...

随机推荐

  1. Android开发需要注意的坑

    Android开发需要注意的坑一览​对于一些Android开发过程中坑爹.细小,但又重要的错误的总结​Android开发在路上:少去踩坑,多走捷径其他参考: ​google官方版本发布图 ​umeng ...

  2. Acrobat 2015 win32破解版

    Acrobat 2015 win32破解版,带破解补丁dll覆盖即可 百度云盘:http://pan.baidu.com/s/1i4tFnNJ

  3. HttpClient(4.3.5) - ResponseHandler

    The simplest and the most convenient way to handle responses is by using the ResponseHandler interfa ...

  4. MVC下用户登录状态校验的问题以及解决方案--------------Action全局过滤器的使用

    前言当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null),我们知道在WebForm中可以定义一个BasePage类让他继承System.Web.UI.Page,重写它的 ...

  5. jquery 解析xml字符串

    // 函数功能:把xml字符串转换成对象 function convertXmlStringToObj(xmlString) { var xmlObj = new Object; var xmlDoc ...

  6. (转)实战Memcached缓存系统(3)Memcached配置参数初解

    一.基本参数 在我们第一次安装Memcached时,一般都是用过这个命令: memcached -m 512 -u root -d -l 127.0.0.1 -p 11211 我们先来解释这几个参数的 ...

  7. 插件笔记——dataTables使用说明

    jquery DataTables中文使用说明 出处:http://blog.vunso.com/201405/jquery-datatables%E4%B8%AD%E6%96%87%E4%BD%BF ...

  8. 我对c++对象内存布局的理解

    引言 结合网上的一些资料,通过自己的一番摸索,得出了一点个人见解.现在写下来,希望与各位同学共同探讨,共同进步. 以下所有代码均是在VS2012下测试. 一个普通的基类 1: #include < ...

  9. 何谓IOC的核心思想

    IOC(Inversion of Control)即控制反转,是在面试或平常交流中经常遇到了词汇:我也曾经仿照Spring,利用JDK的反射和动态代理实现了一个简单的IOC框架,感觉算是知其然也知其所 ...

  10. 父节点使用css的transform: translate(0, 0)时position:fixed在chrome浏览器中无效

    今天在做移动端的页面,无意间发现了一个Chrome浏览器下的一个bug,在使用CSS3的transform: translate(0, 0)属性对节点A进行位置转化,此时A节点下面有一个字节点B,节点 ...