1 Duilib的绘制机制
Duilib中一个重要部分就是其绘制窗口以及控件的机制,如果我们需要在Duilib中自定义一个控件,那么弄清楚Duilib的绘制机制就非常重要,Duilib中有太多与绘制相关的函数,比如Paint、DoPaint、PaintBkcolor、PaintStatusImage、PaintText、PaintBorder、DoPostPaint等等,那么这些绘制函数的调用顺序是什么样的呢?
1.1 Duilib中总体绘制流程
基于Duilib的源码,大致梳理一下Duilib的总体绘制流程,
1. 首先在UIManager.cpp
文件中的CPaintManagerUI
类的MessageHandler
函数中对WM_PAINT
消息的处理代码,其中
m_pRoot->Paint(m_hDcOffscreen, rcPaint, NULL);
开始对控件进行绘制。
2. 然后在CControlUI
的Paint
函数中调用DoPaint
对控件进行绘制,对于每一个控件
PaintBkColor(hDC);
PaintBkImage(hDC);
PaintStatusImage(hDC);
PaintForeColor(hDC);
PaintForeImage(hDC);
PaintText(hDC);
PaintBorder(hDC);
根据上述的源码,每一个控件的绘制顺序为首先绘制背景颜色->绘制背景图片->绘制状态图片->绘制前景颜色->绘制文本->绘制边框。
3. 再回到UIManager.cpp
文件中的CPaintManagerUI
类的MessageHandler
函数中对WM_PAINT
消息的处理代码,在
m_pRoot->Paint(m_hDcOffscreen, rcPaint, NULL);
之后我们可以找到以下代码
for( int i = 0; i < m_aPostPaintControls.GetSize(); i++ ) {
CControlUI* pPostPaintControl = static_cast<CControlUI*>(m_aPostPaintControls[i]);
pPostPaintControl->DoPostPaint(m_hDcOffscreen, rcPaint);
}
在完成控件绘制之后,并且完成本地窗口的绘制完成之后会调用上述代码。这段代码的意思是遍历所有需要PostPaint的控件,然后按顺序调用各自的DoPostPain
函数,这样绘制的东西就会显示所有已绘制控件的上层。
参考链接
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Duilib – Duilib的绘制机制和绘制流程
原文链接:https://www.stubbornhuang.com/2403/
发布于:2022年11月01日 10:20:37
修改于:2023年06月21日 17:54:24
当前分类随机文章推荐
- Duilib - 界面出现不可拖动和不可拉伸的问题 阅读494次,点赞0次
- Duilib - 使用Default设置控件默认的全局样式以及使用Style自定义样式 阅读254次,点赞0次
- Duilib - 为列表控件UIList添加列表子项右键点击消息响应功能 阅读714次,点赞0次
- Duilib - 点击按钮弹出模态对话框 阅读2331次,点赞0次
- Duilib - 字体 阅读3493次,点赞0次
- Duilib - 程序开机自启动 阅读2150次,点赞0次
- Duilib - duilib应用程序实现文件可拖拽的功能 阅读2751次,点赞1次
- Duilib - List控件添加listitem之后自动滚动到底部 阅读154次,点赞0次
- Duilib - 各个控件的消息响应类型 阅读2564次,点赞0次
- Duilib - 在同一台电脑上限制只能运行一个程序,防止软件多开 阅读2186次,点赞0次
全站随机文章推荐
- Phpstudy+VSCode搭建php开发调试环境保姆级教程 阅读498次,点赞0次
- Unity - 字节数组byte[]保存为文件 阅读5235次,点赞2次
- 资源分享 - Artificial Intelligence - A Modern Approach , Fourth Edition 英文高清PDF下载 阅读5913次,点赞0次
- CMake - 指定gcc、g++编译器 阅读68次,点赞0次
- 资源分享 - Video Game Optimization 英文高清PDF下载 阅读1644次,点赞0次
- ThreeJS - 动态更换fbx模型的某个子Mesh现有的纹理贴图为指定的纹理贴图 阅读3199次,点赞1次
- 资源分享 - GPU Pro 360 - Guide to Shadows 英文高清PDF下载 阅读2763次,点赞0次
- OnnxRuntime – 模型部署笔记2,在Visual Studio中配置Onnx Rumtime C++开发环境 阅读661次,点赞0次
- 资源分享 - Digital Image Processing , Second Edition 英文高清PDF下载 阅读2353次,点赞0次
- C++ - 在Visual Studio中使用OpenMP加速for循环 阅读501次,点赞0次
大佬,怎么实现界面上点击按钮就弹出一个窗口显示相关信息,点击界面其他处信息框就消失的功能呢,有时间可以出一期教程嘛,还有一个问题是duilib的窗体设置圆角会有黑色的小角显示,这个有什么好办法可以去除嘛
第一个没得时间写,第二个设置圆角有黑角可以让你的UI直接给你贴图,直接贴上去就好
好的,非常感谢!