zoukankan      html  css  js  c++  java
  • 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中利用消息映射进行消息的传递)

  • 相关阅读:
    Idea debug报错Command line is too long
    云计算与虚拟化入门通识
    yield from语法
    python中 os._exit() 和 sys.exit(), exit(0)和exit(1) 的用法和区别
    python模块中sys.argv[]使用
    SQLAlchemy中Model.query和session.query(Model)的区别
    MAN VGEXTEND
    Python---基础---dict和set
    Python---基础---元组
    Python---基础---list(列表)
  • 原文地址:https://www.cnblogs.com/revercc/p/15551899.html
Copyright © 2011-2022 走看看