天天看點

滑鼠在某個控件上按下,然後離開後彈起,如何捕獲這個滑鼠彈起事件

預設情況下當滑鼠移出控件外部後控件将擷取不到WM_LBUTTONUP消息。

以下通過SetCapture函數實作擷取。

SetCapture 函數功能:

該函數在屬于目前線程的指定視窗裡設定滑鼠捕獲。一旦視窗捕獲了滑鼠,所有滑鼠輸入都針對該視窗,無論光标是否在視窗的邊界内。同一時刻隻能有一個視窗捕獲滑鼠。如果滑鼠光标在另一個線程建立的視窗上,隻有當滑鼠鍵按下時系統才将滑鼠輸入指向指定的視窗。

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

{

switch (msg)

{

case WM_LBUTTONDOWN: //左鍵按下

{

SetCapture(hwnd);

}

break;

case WM_MOUSEMOVE: //滑鼠按下移動

{

if(GetCapture() == hwnd)

{

//滑鼠按下并移動...

}

}

break;

case WM_LBUTTONUP: //左鍵彈起

{

if(GetCapture() == hwnd)

ReleaseCapture(); //目前線程中的視窗釋放滑鼠捕獲,并恢複通常的滑鼠輸入處理。

}

break;

return 0;

}

}

滑鼠在某個控件上按下,然後離開後彈起,如何捕獲這個滑鼠彈起事件