MFC中的消息处理函数

    xiaoxiao2023-11-12  171

    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)