最近一直在想做个DirectUI库. 先找了几个UI库, 也没做过啥Demo. 1年前看过国外的viksoe库(URL: http://www.viksoe.dk/code/index.htm) 因水平有艰也没能坚持看完.
后来找到国内一款牛X的开源库duilib, (URL: www.duilib.com)这个团队还是基于viksoe库开发的, 但完善的很好. 其中有个UIDesigner设计器可以快捷的设计出duilib库可以解析的XML文件( 设计者的主页: http://www.taxue.org ). 以上都是牛人. 其实到他们的BBS会有很多文档可以参考. http://bbs.duilib.com
本人只想快点跟上他们, 所以会陆续在此记录理解到的东西.
1. 整个框架我没法画出来, 还好"踏雪流云"已经画出.(URL: http://www.taxue.org/?p=55 )可以参考下.
2. 简单记录下主要类的功能
CPaintManagerUI很重要的一个类, 管理所有控件树, 并对控件相关消息产生相应的用户层的事件. 显示控件到用户窗口上.
CWindowWnd 相关于WTL库里的CWindow库. 有创建窗口对象, 注册窗口类, 接管消息处理的函数. 也就用户自定窗口的父类.
CControl 所有DUI控件的基础类. 以后的所有控件都会从这个类继承. 包含了控件所需的基本信息.
CContainter窗口类的基类. 所有布局类, 列表控件, 组合框, 都会继承于此. 功能是可以放置基本控件或自定义控件类对象. 还有水平于垂直滚动条功能.
CDialogBuilder解析Skin相关的XML文件, 并转为控件树. 包含了读文件/解压包文件功能, 会利用CMarkup类解析XML中的元素和属性, 并设置到相应的控件对象中.
CDelegate相关类挺有意思, 类似C#里的委托功能.
CRender类对于区域管理打包打的不错.(主要操作HRGN对象)
CRenderEngine 这类纯粹就是用于方便画图. 有关基本线条, 贴图, 透明贴图很有帮助.
恩.... 现在就大概看了这些. 个人大概的分析, 所以难免会出错. 希望能指正. 下回看下消息处理流程.