• 本站由于前段时间遭受到大量临时和国外邮箱注册,所以对可注册的邮箱类型进行了限制!

  • 计算机图形学与计算几何经典必备书单整理,下载链接可参考:https://www.stubbornhuang.com/1256/

  • 在本站开通年度VIP,无限制下载本站资源和阅读本站文章

  • 本站会放置Google广告用于维持域名以及网站服务器费用。

  • 欢迎大家交换友链,可在https://www.stubbornhuang.com/申请友情链接进行友链交换申请!

  • 如果觉得本站的内容有帮助,可以考虑打赏博主哦!

  • 感谢大家访问本站,希望本站的内容可以帮助到大家!

  • 工资「喂饱肚子」,副业「养活灵魂」!

  • 问题反馈可发送邮件到stubbornhuang@qq.com

Duilib – Duilib的绘制机制和绘制流程

Duilib 发布于2022-11-01 阅读 3,456次 3次评论 1次点赞 本文共1155个字,阅读需要3分钟。

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. 然后在CControlUIPaint函数中调用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

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

文章末尾
上一篇
FFmpeg - PTS、DTS、时间基、时间戳详解
FFmpeg
下一篇
C++ - 使用标准库实现事件和委托,信号和槽机制
C++
当前分类随机文章推荐

发表评论

您必须 [ 登录 ] 才能发表留言!

全部评论:3条

加载中...
  1. StubbornHuang Blog-州十三头像
    州十三 2022-12-01 11:04 来自天朝的朋友 谷歌浏览器 Windows 10 北京市 电信

    大佬,怎么实现界面上点击按钮就弹出一个窗口显示相关信息,点击界面其他处信息框就消失的功能呢,有时间可以出一期教程嘛,还有一个问题是duilib的窗体设置圆角会有黑色的小角显示,这个有什么好办法可以去除嘛

    • StubbornHuang Blog-StubbornHuang头像
      StubbornHuang 站长 2022-12-01 11:06 来自天朝的朋友 谷歌浏览器 Windows 10 湖南省 电信

      第一个没得时间写,第二个设置圆角有黑角可以让你的UI直接给你贴图,直接贴上去就好

      • StubbornHuang Blog-州十三头像
        州十三 2022-12-01 11:08 来自天朝的朋友 谷歌浏览器 Windows 10 北京市 电信

        好的,非常感谢!

关注我们的公众号

微信公众号