duilib库是一款轻量级的C++界面开发库,遵循开源BSD协议,可以免费用于商业项目,由杭州月牙儿网络技术有限公司开发。duilib库的源码下载地址:https://github.com/duilib/duilib 。
传统MFC界面库有如下问题:
1) 不美观
2) 界面细节处理不好
3) 使用硬编码
4) 开发效率低下
5) 生成程序体积大
6) MFC界面美化库使用HOOK技术,可能会导致系统不稳定或者引发其他错误
duilib界面库基于GDI在窗口上自绘,无其他依赖,未使用特殊或危险的系统调用,能够很好的解决传统MFC界面的一系列问题。
duilib界面库使用XML来描述界面风格,界面布局,将界面和逻辑分离,同时易于实现各种超炫的界面效果如换色,换肤,透明等。
duilib界面库完全兼容ActiveX控件(如常见的IE控件和Flash),也可以和MFC等界面库配合使用。
技术特点:
1) 界面与业务逻辑分离
2) 使用XML配置界面
3) 界面布局方式灵活多样
4) 内置常用的控件
5) 支持自定义控件
6) 强大的控件组合能力,复杂功能可通过简单控件组合完成
7) 强大的事件处理机制
8) 基于GDI和脏矩形的高效绘制技术
9) 支持多种资源方式,支持多种图片格式
10) 支持alpha混合,支持窗口透明
11) 强大的图片绘制描述方式
12) 类html字符串绘制技术
13) 支持动态变换色调
14) 支持动态切换资源位置方式换肤
15) 支持ansi和unicode,支持多国家语言
16) 支持插件系统
17) 内存占用小
18) 无第三方库依赖
19) 提供可见即所得的ui编辑器
20) 丰富易上手的demo例子
其它特点:
其子窗口不以窗口句柄的形式创建,只是逻辑上的窗口,绘制在父窗口之上
源码文件组织:
源码文件中主要分为:
DuiLib库
用以XML脚本配置的DuiDesigner设计器
doc文档入门手册
bin编译后的设计器和duilib.dll以及各demo需要的xml资源
各种用例demo
包含各种控件的属性列表.XML
其他不重要的文件;
源码分析步骤:
1. 阅读官方简介,了解其特性、功能、应用场景;
2. 获取源码和开发文档等一系列说明文档;
3. 思考自己开发该项目应该会如何架构、功能实现等;
4. 编译源码、顺利执行程序,观察执行效果,从入口点跟踪程序;
5. 先了解项目大致运行方式、模块组织结构,体会其中可以学习的设计模式;
6. 再从细节上学习其使用到得惯用法、奇淫技巧;
7. 与第3步作对比,感受项目实现和自己的想法的异同点;
8. 在学习过程中作笔记、画草图,此后若有时间建议可以自己尝试实现该项目,拷贝部分源码分步骤学习也是不错的方式。
事实上,每个人学习的方式不同,有的人会从开发文档或入门手册开始,有的人会从demo用例开始了解使用。
文件结构:
Core:核心组件(渲染器、容器、构建器、解析器、控件基类);
Layout:界面布局组件(水平、垂直、子控件、Tab等);
Utils:辅助工具相关(解压缩、图片、窗口基类、委托等);
Control:各种控件(button、combox、label、checkbox、list等);
消息流转大体方式为:
CWindowWnd::__WndProc -> HandleMessage -> CPaintManager::MessageHandler;其中有些消息不被处理将还给::DefWindowProc或::CallWindowProc默认处理;
消息循环:
调用CPaintManagerUI中的MessageLoop,内部采用GetMessage、TranslateMessage、DispatchMessage获取消息、翻译消息、分派消息;其中在调用全局的TranslateMessage前,先调用了CPaintManagerUI::TranslateMessage,给予用户自己翻译消息码的机会;