DuiLib简介

DuiLib简介duilib 库是一款轻量级的 C 界面开发库 遵循开源 BSD 协议 可以免费用于商业项目 由杭州月牙儿网络技术有限公司开发 duilib 库的源码下载地址 https github com duilib duilib 传统 MFC 界面库有如下问题 1 不美观 2 界面细节处理不好 3 使用硬编码 4 开发效率低下 5 生成程序体

    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,给予用户自己翻译消息码的机会; 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/208140.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午12:16
下一篇 2026年3月19日 下午12:16


相关推荐

  • 用python3实现粒子群优化算法(PSO)

    用python3实现粒子群优化算法(PSO)粒子群优化算法(ParticleSwarmOptimization,PSO)属于进化算法的一种,是通过模拟鸟群捕食行为设计的。从随机解出发,通过迭代寻找最优解,通过适应度来评价解的品质。设想这样一个场景:一群鸟在随机搜索食物。在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是他们知道当前的位置离食物还有多远。那么找到食物的最优策略是什么呢。最简单有效的就是搜寻目前离食物最近的鸟的周围区…

    2022年5月24日
    46
  • Codeforces 459E Pashmak and Graph(dp+贪婪)

    Codeforces 459E Pashmak and Graph(dp+贪婪)

    2022年1月5日
    45
  • Eclipse代码的自动补全

    Eclipse代码的自动补全打开eclipse依次点击Window–>Perferences–>Java–>Editor–>ContentAssist在【AutoactivationtriggersforJava:】选项后的文本框中会看到一个”.”。eclipse默认只有在你输入”.”之后才会有代码提示和自动补全。我们需要在”.”之后加上”qwertyuiopasdfghjklzxcvbnm”,其实就是从左至右,从上至下顺序按你的键盘。…

    2022年5月31日
    44
  • Q学习和深度Q学习(DQN)论文笔记「建议收藏」

    Q学习和深度Q学习(DQN)论文笔记「建议收藏」Q学习(Q-learning)强化学习中有个很重要的递归关系,贝尔曼方程(BellmanEquation):Qπ(st,at)=E[r+γE[Qπ(st+1,at+1)]]Q^\pi(s_t,a_t)=E[r+\gammaE[Q^\pi(s_{t+1},a_{t+1})]]Qπ(st​,at​)=E[r+γE[Qπ(st+1​,at+1​)]]这个公式实际上也揭露了状态的马尔科夫性质,也…

    2022年10月3日
    7
  • 计算NDWI错误记录

    计算NDWI错误记录需要 HBaseContext 类找了很久没找到 最后引入 jar 包 把 spark 版本改为 1 6 0 解决问题 http maven wso2 org nexus content repositories Apache org apache hbase hbase spark 2 0 0 SNAPSHOT gdal 读取波段顺序的错误 之前没注意波段顺序 读取 GF1 时 gdal 读取的 1 4 波

    2026年3月18日
    2
  • C++学习——继承与派生「建议收藏」

    C++学习——继承与派生「建议收藏」普通继承例题:定义一个名为Phone的手机类,有如下私有成员变量:品牌、型号、CPU、电池容量,如下成员函数:构造函数初始化手机的信息。在此基础上派生出NewPhone类,派生类增加了两个新的私有数据成员,分别用于表示颜色和价格,增加了一个成员函数用来输出手机信息。代码如下:#include <iostream>#include<string>#include&l…

    2022年8月18日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号