Duilib学习笔记《06》— 窗体基类WindowImpBase

使用DuiLib进行UI开发的虚函数解析及控件绑定、响应与消息处理 在DuiLib中,界面的布局和控件通常通过XML文件来定义。以下是一个简单的XML文件示例,该文件定义了一个带有按钮和标签的布局:<Button name="btnOK" text="确定" /><Label name="lblStatus" text="状态" /></Window>1.定义控件变量public:// 其他函数和成员变量2.在Init函数中绑定控件有时我们需要处理一些自定义的消息,例如计时器消息或DPI改变消息。// 处理计时器消息// 处理DPI改变消息。 阅读详情

在前面的例子中我们发现,窗口都是继承CWindowWnd、INotifyUI,然后重载相关函数去实现。显然,我们发现窗口的创建流程实际上都是差不多的,主要只是在OnCreate加载的配置文件不同等等…所以,能不能创建一个公有的窗体基类呢?其实,在duilib中已经提供了一个窗体基类 WindowImplBase:在基类内搭建窗口的消息框架,各处理函数为虚函数,子类可以重载处理函数,实现其处理。

此处我们以修改之前的代码为例来进行说明。

1. 窗体显示

CMainWndDlg类修改为继承WindowImpBase类:class CMainWndDlg : public WindowImplBase

将之前的成员函数全部删除,添加如下函数(实际上是重载WindowImplBase中的函数)

public:
    LPCTSTR GetWindowClassName() const;    
    virtual CDuiString GetSkinFile();
    virtual CDuiString GetSkinFolder();

对应的函数实现:

LPCTSTR CMainWndDlg::GetWindowClassName() const
{
    return _T("UIMainWnd");
}
CDuiString CMainWndDlg::GetSkinFile()
{
    return _T("DemoSkin.xml");
}
CDuiString  CMainWndDlg::GetSkinFolder()
{
    return CDuiString(CPaintManagerUI::GetInstancePath());
}
这里,窗体Create创建时直接根据传递的窗口XML布局文件,调用父类的函数处理。这样一来,编译运行窗体就可以显示出来了。


2. 消息处理

对于每个窗体,具体的操作是不一样的,所以对应的控件消息等等还需要在对应的窗体中去自行处理。

2.1 事件消息

对于duilib自带的消息,其处理和Duilib学习笔记《05》中的处理是一样的,该部分基本没什么变化。只需要重装Notify,然后在实现中进行相关处理即可。(具体参见代码)

2.2 用户自定义消息

在实际情况中,可能多个窗口之间传递用户自定义消息等情况,而对于用户自定义消息。我们需要在HandleCustomMessage中去处理。首先需要重载该函数:LRESULT HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);在函数实现中,根据具体的消息进行部分的分支处理:

LRESULT CMainWndDlg::HandleCustomMessage( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled )
{
    bHandled = TRUE;    // 消息本地处理,不流入系统处理。
    switch (uMsg)
    {
    default:
        bHandled = FALSE;    // 本地没有处理,流入系统处理。
    }
    return 0;
}

补充说明:

duilib自带的提供的WindowImpBase当中可能存在部分问题,具体的后续会提到。根据时间情况的需要,可自行对WindowImpBase继续修改补充。


PS: 欢迎关注微信公众号:开发者小黑屋,分享优质技术干货。 

这里写图片描述


EasyX图形库实战:从C语言入门到开发小游戏 图形编程是许多编程学习者从控制台迈向可视化应用的关键一步。理解屏幕坐标系、帧循环和双缓冲等基础原理,能帮助开发者快速适应各类图形库的开发模式。在Windows环境下,EasyX作为一款轻量级C/C++图形库,封装了底层窗口创建和消息处理细节,让初学者无需深入Win32 API即可实现绘图、动画以及键盘鼠标交互。通过一个完整的打砖块小游戏实例,可以系统掌握游戏循环、碰撞检测、资源预加载等工程实践。这套学习路径适合刚学完C语言语法的学生,既能快速获得可视化反馈,又能为后续学习SDL、OpenGL等更复杂的图形框 阅读详情

相关推荐

duilib 消息循环机制

1 消息处理 ​ 在duilib中我们一般会创建一个继承WindowImplBase的窗口,然后重写Notify函数,在Notify函数中处理控件消息,比如button的消息类型就是click,代码如下所示: class MyWnd :public DuiLib::WindowImplBase{ ... virtual void Notify(DuiLib::TNotifyUI& msg) override; }; void MyWnd::Notify(DuiLib::TNotif

weixin_43938539的博客 888

3消息循环中的消息处理

duilib中消息的流程十分复杂,窗口想处理消息,可以通过重载几个函数来实现。

silly的博客 1584

用ADS搞定CGH40010F的宽带连续F类功放:从阻抗计算到版图仿真的保姆级流程

本文详细介绍了使用ADS设计CGH40010F宽带连续F类功放的全流程,从阻抗计算到版图仿真。通过分析器件特性和理论基础,提供谐波阻抗匹配和版图协同验证的实用技巧,帮助射频工程师高效完成高效率功放设计。重点关注宽带连续F类功放的设计难点和调试方法,提升设计成功率。

weixin_29189377的博客 373

Duilib HandleMessage与MessageHandler区别

Duilib HandleMessage与MessageHandler区别 flyfish WindowImplBase的声明部分 virtual LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam); virtual LRESULT HandleCustomMessage(UINT uM...

二分掌柜的 3723

RTX 5090配Ubuntu 24.04踩坑记:手把手搞定OpenVLA-OFT环境(附版本避坑清单)

本文详细记录了在RTX 5090显卡和Ubuntu 24.04系统上部署OpenVLA-OFT环境的完整过程,包括驱动安装、CUDA配置、PyTorch版本选择等关键步骤。提供了经过验证的版本组合清单和常见错误解决方案,帮助开发者高效搭建AI开发环境。

weixin_30342209的博客 465

模板匹配加速之金字塔分层搜索

图像金字塔是一种多分辨率图像表示方法,它通过一系列逐渐缩小或放大的图像来表示原始图像的不同尺度。高斯金字塔(Gaussian Pyramid):通过不断下采样(降采样)生成更小的图像。拉普拉斯金字塔(Laplacian Pyramid):通过高斯金字塔和差分操作生成一组残差图像。在模板匹配中,我们主要使用高斯金字塔来实现多尺度匹配。金字塔灰度模板匹配通过多尺度搜索策略,在保持较高准确率的同时显著提升匹配速度,尤其适用于:高分辨率图像处理实时检测系统移动端设备等资源受限场景。

weixin_44969144的博客 1732

Duilib学习总结

Duilib学习笔记: Duilib学习笔记《01》— duilib整体框架认识 Duilib学习笔记《02》— 界面布局 Duilib学习笔记《03》— 控件使用 Duilib学习笔记《04》— 窗体显示 Duilib学习笔记《05》— 消息响应处理 Duilib学习笔记《06》— 窗体基类WindowImpBase Duilib学习笔记《07》— 资源加载 Duilib扩展:

rundll64的专栏 662

基于LORA的双机通信的智能农业系统

通过LoRa模块与主机进行通信,监测环境中的温度、湿度、土壤湿度和光照强度等参数,并根据预设的自动控制逻辑或者手动指令控制继电器开关,从而调节风扇、加热器、水泵、喷雾器和灯光等设备,为植物提供适宜的生长环境。使用的Lora是大夏龙雀的感觉这个是我使用过的Lora里面最好用的,因为不用设置频道就可以直接透明传输,使用起来得心应手。就像两个单片机直接串口通信一样,缺点是异步串行,不能同时进行接收和发送。继电器灯亮模拟打开对应的风扇、水泵、灯、喷雾、加热。1.使用温度传感器测当前环境的温湿度。

ssjsjss的博客 1739

Duilib学习笔记《04》— 窗体显示

在前面已经了解了duilib控件以及界面布局相关内容,接下来就要考虑该如何将xml中描述的布局通过界面展现出来。实际上在 Duilib学习笔记《01》 中我们已经简单提到过基本的流程及元素创建机制。这里我们直接用 Duilib学

WHO1753 934

Cadence IC618与Spectre231安装配置全攻略:License、环境变量与依赖检查

EDA工具部署中,License管理与环境变量隔离是核心难点。FlexLM作为通用授权机制,通过守护进程和端口配置实现工具授权;环境变量则控制工具路径与库加载顺序,避免版本冲突。合理配置可确保IC618与Spectre231稳定运行,提升仿真效率。典型应用场景包括模拟IC设计、高校实验室及企业级EDA环境。本文聚焦Cadence IC618与Spectre231的安装实践,详解License配置、环境隔离及依赖检查,助你快速搭建可靠设计环境。

weixin_28721917的博客 324

RT-DETR改进策略【损失函数篇】| 通过辅助边界框计算IoU提升检测效果(Inner_GIoU、Inner_DIoU、Inner_CIoU、Inner_EIoU、Inner_SIoU)

为了弥补现有 IoU 损失在不同检测任务中泛化性弱和收敛速度慢的问题,·Inner-IoU·通过引入比例因子 “ratio” 来控制辅助边界框的尺度大小,利用不同尺度的辅助边界框来计算损失,从而加速边界框回归过程。

Limiiiing的博客 1962

第一章 第五小节Duilib的CPaintManagerUI类(一)

文章目录1.CPaintManagerUI类2.作者答疑 1.CPaintManagerUI类   如果读者从网上复制过代码,然后生成过项目,就是一定首当其冲的面对过这个类,这个类是WindowImplBase基类的一个成员变量,如下所示: CPaintManagerUI m_pm;   所以每一个继承至WindowImplBase基类的窗口对象,都有一个单独的CPaintManagerUI成员,从字面意思就很清楚,这是一个与绘制息息相关的类。接着查看下它的源代码。它的源代码比较多,先将其

插件开发 940

【OpenClaw从入门到精通】第20篇:OpenClaw实战—从零搭建教育自动化助教系统(作业批改+智能答疑+学情分析)【2026实测】

本文基于OpenClaw开源框架,聚焦教育行业“答疑重复、批改耗时、学情模糊”三大核心痛点,提供从环境部署到功能落地的全流程实操方案。通过整合QQ群交互、代码分析、数据可视化等技能,构建“智能答疑+作业批改+学情分析”的自动化助教系统。系统支持7×24小时群聊答疑、多语言作业自动评审、学情数据周报生成,经实测可使助教工作时间减少60%、作业批改效率提升5-10倍、学情问题识别提前5周。文中包含完整配置步骤、可直接运行的代码示例及避坑指南,兼顾新手入门与进阶实操,帮助教育工作者快速落地自动化工具,从重复劳动中

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1448

DuiLib简介与控件使用说明

DuiLib简介核心类CWindowWndCDialogBuilerCPaintManagerUI控件类控件使用示例背景小图标鼠标拖动弹出式菜单时间日期控件定制列表List平铺布局TileLayout注意事项说明颜色表示设定控件位置入口main多线程下改变界面 DirectUI意为直接在父窗口上绘图(Paint on parent dc directly)。即子窗口不以窗口句柄的形式创建(win...

飞鹰技术 2924

YOLO26涨点改进 | 全网独家首发 主干改进篇 | TGRS 2025 | RepViT-TD,告别庞大骨干!YOLO26 + RepViT-TD轻量又强大,实现更快更准的小目标检测!

本文提出将RepViT-TD轻量级主干网络应用于YOLO26目标检测框架,以提升小目标检测性能。RepViT-TD通过优化计算资源分配,强化前两层高分辨率特征提取能力,在保持轻量化的同时(仅4.85M参数)显著提升微小目标的检测精度(AI-TODv2数据集AP50达54.6%)。文章详细介绍了三种主干改进方案(RepVit_ldy1/2/3)的代码实现,并提供了完整的YAML配置文件修改指南,使模型能高效部署于边缘设备。实验表明,该方法在计算复杂度(38.19G FLOPs)和检测精度间取得了良好平衡。

Ai缝合怪、助力小伙伴高效发论文 326

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

duilib 界面库 实现timer定时器

看了大神介绍的duilib感觉已被同龄人狠狠地甩在背后。所以痛下决心,之后要多花时间写代码。 大神教程传送门: http://www.cnblogs.com/Alberl/p/3341956.html 现在的问题是想基于duilib实现一个timer定时器。工程基础大概是在 http://www.cnblogs.com/Alberl/p/3343763.html 因为自己的东西是基于大神...

weixin_30252709的博客 516

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

第一章 第四小节Duilib的WindowImplBase基类(一)

在第一小节部分,给读者介绍了duilib,它是一个DirectUI界面控件。换而言之,它采用绘制的方法在界面上直接绘制各种子控件,那既然要绘制,它本身也是不能脱离操作系统平台的,而windows的基本UI部件就是窗口,所以duilib的绘制方法的对象,自然也是窗口。接下来给读者分析,在duilib中,这个绘制对象WindowImplBase类。

插件开发 978

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VS2015中Duilib界面使用OpenGL导入3DS模型(C++完整代码和源文件)

VS2015中Duilib界面使用OpenGL导入3DS模型(C++完整代码和源文件)

汪蛋的博客 2281
上一篇: Duilib学习笔记《05》— 消息响应处理
下一篇: C++基础<01>—C++初识
7-sevens
博客等级 码龄10年 259粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值