• 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中利用消息映射进行消息的传递)

  • 相关阅读:
    解析python数据后用html输出
    python 自动化测试HTTP接口
    python 自动化对比返回结果
    Java 基础知识 练习
    Java 菜鸟学习之 script脚本语句
    java语言的认识
    Script 语言的简单练习题 乘法口诀
    Script 简单语句的练习题
    Java菜鸟培训第二天
    36个号码随机摇奖编码
  • 原文地址:https://www.cnblogs.com/revercc/p/15551899.html
Copyright © 2020-2023  润新知