我该如何处理窗口的消息?

时间:2019-08-19 08:16:18

标签: c++ winapi mfc

我正在做一些CreateWindow的事情。 我的工作需要我在应用程序的一个窗口中插入一个Button,然后单击该按钮,我的应用程序才能执行某些操作。该应用程序不是我的应用程序,因此我认为我需要做一些“钩子”。 我尝试过:

HWND hwnd = FindWindowEx("className",NULL)
CreateWindowEx(...hwnd...)

它起作用了。 Button已成功插入目标应用程序。

但是当我尝试处理该窗口的消息时 我失败了。 该hwnd属于我的应用程序hInstance,但是我的应用程序具有CEF自己的消息循环。 我尝试了SetWindowsHookEx,但无法正常工作。 无论我做什么,都不会处理。 如果我使用while(GetMessage (&messages, NULL, 0, 0)),它将阻止我的应用程序的线程

WNDCLASS xxxRegisterClass(xxx)CreateWindow(className)  使我困惑。

我尝试使用LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam),但是while()将阻止我的应用程序的线程 并且在我的应用程序的wndProc中,没有WM_COMMAND消息。

    HWND hwnd = FindWindowEx(0, 0, L"TCustomBaseForm" , NULL);
    HWND hwndButton = CreateWindowEx(0L,_T("Button"), L"Btn",  WS_CHILD|WS_VISIBLE| BS_PUSHBUTTON, 435, 45, 35, 45, hwnd, NULL, GetModuleHandle(0), 0);
    DWORD dwProcId = 0;
    DWORD dwThreadId = 0;
    dwThreadId = GetWindowThreadProcessId(hwndButton, &dwProcId);
    SetWindowsHookEx(WH_MOUSE, Hookproc, g_hInstance, dwProcId);

直到现在,我的“插入按钮”都无法正常工作。 因此,有没有办法使此“插入的窗口”或按钮与MFC按钮相同,当我单击它时,我可以在WM_LBUTTONCLICK中处理类似WndProc的消息吗?

2 个答案:

答案 0 :(得分:0)

单击按钮时,按钮会向其父窗口发送WM_COMMAND消息。

至少有两种方法可以避免这种情况:

  • 将按钮创建为您同时创建的STATIC控件(或自定义窗口)的子级。您需要subclass STATIC控件才能接收消息。
  • 对按钮进行子类化,并捕获鼠标上移消息和空格/输入击键消息。

答案 1 :(得分:-2)

谢谢大家。我做到了
我创建一个带有按钮的窗口。然后我使用SetParent(myWindowHwnd,myTargetWindowHwnd)并在窗口中处理按钮的click事件,它可以正常工作。
没有钩,没有问题。 非常感谢大家。 感谢您编辑我的问题,我的英语水平很高。
我已经学到了很多有关Windows Hook的知识。