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中的消息处理函数的主要内容,如果未能解决你的问题,请参考以下文章