MFC中的消息处理函数

1、在Windows API编程中,直接在消息处理函数中编写WM_PAINT处理代码。

2、在MFC中,CFrameWnd的消息处理过程在哪里呢?MFC时如何将消息处理函数和窗口关联起来的。

  在CFrameWnd::CreateEx中,调用PreCreateWindows来注册窗口。

  AfxDefRegisterClass(AFX_WNDFRAMEORVIEW_REG):注册一个固定的窗口类,这个窗口类中的消息处理过程时一个固定的消息处理过程,

  真正将我门的消息处理过程CWnd::WindowProc和我们的窗口进行关联的代码在AfxHookWindowCreate(this)函数中。

  CFrameWnd::CreateEx中,调用AfxHookWindowCreate(this),将窗口类CFrameWnd::WindowProc的消息处理过程和CFrameWnd窗口进行关联。

  AfxHookWindowCreate(this)

  ::SetWindowsHookEx(WH_CBT, _AfxCbtFilterHook, NULL, ::GetCurrentThreadId());

  这个函数在线程中,埋下一个钩子,

  找到钩子函数,_AfxCbtFileterHook,在钩子函数中下一个断点。

    在_AfxCbtFileterHook中,调用SetWindowLongPtr(hWnd, GWLP_WNDPROC, (DWORD_PTR)afxWndProc);

    将我们创建的窗口pFrame和afxWndProc窗口处理过程和关联(afxWndProc是MFC中的一个统一消息处理过程)

  AfxWndProc调用AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam);

  AfxCallWndProc(pWnd, hWnd, nMsg, wParam, lParam)调用pWnd->WindowProc(nMsg, wParam, lParam);

3、CFrameWnd是一个窗口,那么这个类中,包含了消息处理函数,这个消息处理函数继承自CWnd。

4、在CWnd中存在以下的这个函数,该函数就是消息处理函数。

virtual LRESULT WindowProc(
    UINT message,  
    WPARAM wParam,  
    LPARAM lParam);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值