MFC中的消息处理函数

Posted _xiaohaige

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

 

以上是关于MFC中的消息处理函数的主要内容,如果未能解决你的问题,请参考以下文章

MFC中ProcessMessage()函数有啥作用?

MFC按钮控件按下和弹起的消息函数分别是啥啊

MFC如何添加系统消息处理函数?

VS2010-MFC(对话框:为控件添加消息处理函数)

MFC SDI中 如何为动态创建的按钮添加消息处理函数

MFC的回调函数