預設情況下當滑鼠移出控件外部後控件将擷取不到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;
}
}