首页 > 解决方案 > 如何将 CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 输入(鼠标点击、按键)传递给类

问题描述

我创建了一个回调来处理 Window 过程。例如,每次单击鼠标按钮时,我都想将此消息发送到几个类,以便哪个类可以根据自己的需要进行不同的处理。如果可能的话,我希望它是跨平台的,但也仅限于 Windows。

CGui * gui;
gui = new Gui();

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    case WM_LBUTTONDOWN:
    {
      // how to send that a left button was pressed to CGui class ?
      // is there another way than gui->LeftButtonPressed = true;
    }
    return (DefWindowProc(hWnd, uMsg, wParam, lParam));
}

回答我自己的问题:

我相信你们正在谈论的“解决方案”是:

    case WM_NCCREATE:
    {
        CREATESTRUCT * pcs = (CREATESTRUCT*)lParam;
        CGui * pCGui = (CGui*)pcs->lpCreateParams;
        pCGui->m_hWnd = hwnd;
        SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG)pcs->lpCreateParams);
        CGui * pCGui = (CGui*)GetWindowLongPtr(hwnd, GWLP_USERDATA);

        break;
    }

但实际上,由于我需要升级几个(正如我提到的)类,正确的解决方案是访问 WndProc 的类:

    gui->handleMessages(window->hWND, window->message, window->wpParam, 
    window->lpParam);

    And add at the original WndProc :
    message = uMsg;
    wpParam = wParam;
    lpParam = lpParam;

不管怎么说,还是要谢谢你。

标签: c++classwinapi

解决方案


推荐阅读