本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:Duilib – Duilib的绘制机制和绘制流程
原文链接:https://www.stubbornhuang.com/2403/
发布于:2022年11月01日 10:20:37
修改于:2022年11月01日 10:20:37
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
函数,这样绘制的东西就会显示所有已绘制控件的上层。
参考链接
当前分类随机文章推荐
- Duilib - 使Duilib主窗口前置,但是又不是一直作为最顶层窗口 阅读3088次,点赞2次
- Duilib - pos和padding属性设置的顺序 阅读2708次,点赞0次
- Duilib - 为列表控件UIList添加列表子项右键点击消息响应功能 阅读473次,点赞0次
- Duilib - Label控件文本换行 阅读2019次,点赞1次
- Duilib - 设置窗体阴影 阅读3071次,点赞2次
- Duilib - 超链接文本 阅读3698次,点赞0次
- Duilib - Edit编辑控件输入文字时编辑框背景颜色不是所设置的背景颜色的问题 阅读535次,点赞1次
- Duilib - 程序开机自启动 阅读1960次,点赞0次
- Duilib - Duilib的绘制机制和绘制流程 阅读443次,点赞1次
- Duilib - 各个控件的消息响应类型 阅读2380次,点赞0次
全站随机文章推荐
- Modern OpenGL从零开始 - Fbxsdk::FbxAMatrix转换为glm::mat4 阅读2593次,点赞0次
- Centos7 - 防火墙操作以及开启和关闭特定端口 阅读4374次,点赞2次
- C++ - 使用标准库实现事件和委托,信号和槽机制 阅读410次,点赞0次
- 资源分享 - Computer Animation - Algorithms and Techniques (Third Edition) 英文高清PDF下载 阅读2388次,点赞1次
- Pytorch - pad_sequence、pack_padded_sequence、pack_sequence、pad_packed_sequence参数详解与使用 阅读969次,点赞0次
- 计算机图形学 - 常用的3D数学知识备忘,如三角函数、向量运算、矩阵运算、图形学常用的平移缩放旋转矩阵,视图矩阵,投影矩阵 阅读1348次,点赞4次
- 资源分享 - 深度学习入门之Pytorch(廖星宇著)PDF下载 阅读3330次,点赞0次
- 资源分享 - 计算机图形学 第2版,Fundamentals of Computer Graphics(Second Edition) 中文版PDF下载 阅读3876次,点赞0次
- Python - glob模块详解以及glob.glob、glob.iglob函数的使用 阅读1113次,点赞0次
- 网站推荐 - 注册chatGPT无法接收验证短信?使用便宜好用的sms-activate 阅读4418次,点赞2次
大佬,怎么实现界面上点击按钮就弹出一个窗口显示相关信息,点击界面其他处信息框就消失的功能呢,有时间可以出一期教程嘛,还有一个问题是duilib的窗体设置圆角会有黑色的小角显示,这个有什么好办法可以去除嘛
第一个没得时间写,第二个设置圆角有黑角可以让你的UI直接给你贴图,直接贴上去就好
好的,非常感谢!