如何确定包含 windows 的 ATL 消息映射中的 HWND

How to determine the HWND in an ATL message map with contained windows

假设您正在创建一个具有一个或多个 CContainedWindow 的 ATL CWindowImpl class。然后假设您想要链接一些 CContainedWindowALT_MSG_MAP,以便一对 windows 在他们的 window 过程中共享一些基本功能。但是在这些共享过程中,您会想知道哪个 window 正在接收给定的消息。 ATL 不在其消息映射处理程序函数中传递 HWND。那么还有另一种方法可以确定您正在处理的是哪个 HWND 吗?

实际上,我还不确定,但我认为这可能有效:

#define MESSAGE_HANDLER_EX(msg, func) \
    if(uMsg == msg) \
    { \
        bHandled = TRUE; \
        lResult = func(hWnd, uMsg, wParam, lParam, bHandled); \
        if(bHandled) \
            return TRUE; \
    }

然后处理函数应该有一个像这样的签名:LRESULT HandlerFunc(HWND, UINT, WPARAM, LPARAM, BOOL&).