Duilib消息处理
Duilib#
Duilib的绘图是基于xml + UI渲染绘图引擎 + Win32实现的。
Duilib消息处理与MFC消息处理比较#
Duilib的窗口都是基于CWindowWnd类建立的,调用CWindowWnd::Create()函数创建窗口,此函数会调用CWindowWnd::RegisterWindowClass()注册窗口类。
CWindowWnd::RegisterWindowClass()函数注册的窗口类的窗口回调函数默认为CWindowWnd::__WndProc()函数。( CWindowWnd::__WndProc()函数相当于MFC中公共消息处理函数 AfxWndProc()。)
CWindowWnd::__WndProc()函数会通过WM_NCREATE消息的lparam参数获得对应的产生消息的窗口类的CWindowWnd基类的指针,此指针是在CWindowWnd::Create中调用CreateEx函数传递的CWindowWnd的this指针。(在MFC中通过CWnd->FromHandlePermanent函数获得的对应窗口的CWnd基类指针)
接着CWindowWnd::__WndProc()函数会将不处理的函数交给CWindowWnd::HandleMessage处理,而此函数是虚函数,一般由我们的子类覆盖进行消息的集中处理。(此HandleMessage()函数相当于MFC中的CWnd::OnWndMsg函数)
CWindowWnd子类覆盖了HandleMessage函数后一般会先自己将一部分消息处理,然后控件的消息都交给渲染类的消息处理过程处理(CPaintCPaintManagerUI::ManageHandle函数),然后都不处理的交给CWindowWnd::HandleMessage处理,此函数会调用::DefWindowProc函数进行默认处理。
对于哪些控件的消息就统一交给渲染类的UI消息处理过程统一处理,可以调用CPaintManagerUI::AddNotifier函数增加通知例程,重写虚函数Notify在函数中进行消息处理。实际是渲染类CPaintManagerUI的消息处理过程会调用SendNotify函数向所有有通知例程的函数发送需要处理的消息。(MFC中是通过在CWnd::OnWndMsg中利用消息映射进行消息的传递)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】