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

  • 相关阅读:
    sniffer嗅探
    记一次IE代理异常故障
    B860A机顶盒加强
    适合Lakka的安卓盒子配置
    MVG2000 破解
    网络图标显示地球的解决办法
    数码视讯Q7 TTL破解安装APP
    kbmmw 发布免费社区版
    一步一步实现kbmmw的httpsys使用https功能
    PostgreSQL 基本数据类型及常用SQL 函数操作
  • 原文地址:https://www.cnblogs.com/revercc/p/15551899.html
Copyright © 2020-2023  润新知