2017-06-04 38 views
-3

我有一個使用Win32Api製作的按鈕,我希望能夠在用戶將鼠標放在按鈕矩形內時進行通知。 我注意到,當用戶確實調用了WM_NOTIFY,但我不知道使用哪個標誌來確保用戶在其區域中有鼠標。C++ win32 api通知按鈕區域內的鼠標

這裏是我的按鈕:

HWND Button = CreateWindow("BUTTON", "Test", 
     WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_NOTIFY, 
     20, 240, 120, 20, 
     hwnd, (HMENU)101, NULL, NULL); 

而且我的WndProc:

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{ 

    switch (msg) 
    { 
    case WM_NOTIFY: 
    { 
     //??? Here is where I want to do it 
    } 
    case WM_CREATE: //On Window Create 
    { 
     wHWND = hwnd; 
     if (onCreate != NULL) 
      onCreate(hwnd); 
     break; 
    } 
    case WM_COMMAND: //Command execution 
    { 
     //... 
     break; 
    } 
    case WM_DESTROY: //Form Destroyed 
    { 
     if (onDestroy != NULL) 
      onDestroy(hwnd); 
     PostQuitMessage(0); 
     break; 
    } 
    } 
    return DefWindowProc(hwnd, msg, wParam, lParam); 
} 

我不知道如果我使用WM_NOTIFY或不正確的路徑是,也許還有一個更簡單方法來做到這一點。謝謝!

+0

如何使用鼠標對焦按鈕? –

+0

將它放在他的矩形內 – OnelioD

+0

這不會改變焦點。 –

回答

0

嘗試捕獲WM_SETFOCUS消息,而不是如果你想要一個通用的跟蹤焦點的方式。

BN_SETFOCUS在WPARAM的高16位被作爲WM_COMMANDHIWORD):

按鈕的父窗口通過WM_COMMAND消息

接收此通知代碼如果不能談論焦點,但只是鼠標的位置,那麼你可以使用ChildWindowFromPointExRealChildWindowFromPoint和一個計時器。

+0

據我所知,BN_SETFOCUS是鍵盤焦點,而WM_SETFOCUS從不會告訴按鈕是否擁有它。我想知道按鈕的焦點是什麼時候改變它的外觀 – OnelioD

+0

當你得到WM_SETFOCUS時調用GetFocus() – Anders

+0

即使我把光標放在矩形按鈕裏面,它總是會返回HWND窗口 – OnelioD