本文主要是介绍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中的消息处理函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!