簡體   English   中英

我如何處理窗口的消息?

[英]How could I handle a Window's Message?

我正在處理一些CreateWindow事情。 我的工作需要將一個按鈕插入到應用程序的窗口之一中,當我單擊該按鈕時,我的應用程序可以執行某些操作。 該應用程序不是我的應用程序,所以我認為我需要做一些“鈎子”。 我試過這個:

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

它的工作。 按鈕成功插入目標應用程序。

但是當我嘗試處理該窗口的消息時,我失敗了。 這個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 按鈕相同,當我點擊它時,我可以在我的WndProc處理像WM_LBUTTONCLICK這樣的消息?

單擊按鈕時,按鈕會向其父窗口發送WM_COMMAND消息。

至少有兩種方法可以在不掛鈎的情況下處理此問題:

  • 將按鈕創建為您也創建的STATIC控件(或自定義窗口)的子項。 您需要子類STATIC控制接收消息。
  • 子類化按鈕並捕捉鼠標向上消息和空格/輸入按鍵消息。

謝謝你們。 我做到了。
我創建了一個帶有按鈕的窗口。 我使用SetParent(myWindowHwnd,myTargetWindowHwnd)並在我的窗口中處理按鈕的單擊事件,它可以工作。
沒有鈎子,沒有問題。 非常感謝大家。 感謝您編輯我的問題,因為我的英語很糟糕。
我學到了很多關於 Windows Hook 的知識。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM