mfc 如何捕獲應用程式視窗以外的滑鼠事件
一般應用程式當中的滑鼠事件只能爭對應用程式視窗內部有效,如果點選應用程式以外的視窗,例如點選其它應用程式視窗等,這個時候,滑鼠訊息是不會發送給我們的應用程式視窗,更不會激發事件。這樣怎麼處理呢。我們可以利用mfc視窗中的windows訊息處理函式,來處理我們的滑鼠或鍵盤事件操作如下:
首先在我們需要開啟捕獲的事件中加入滑鼠捕獲
SetCapture();
然後在WindowProc中加入如下程式碼:
LRESULT CMyxgsdlgmainbg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: 在此新增專用程式碼和/或呼叫基類
POINT point;
CRect rect;
switch (message)
{
case WM_LBUTTONDOWN:
;
case WM_LBUTTONDBLCLK:
;
case WM_RBUTTONDOWN:
;
case WM_RBUTTONDBLCLK:
;
case WM_MBUTTONDOWN:
;
case WM_MBUTTONDBLCLK:
GetCursorPos(&point);
ScreenToClient(&point);
CRect rect;
AfxGetMainWnd()-> GetWindowRect(&rect);
ScreenToClient(&rect);
if(!rect.PtInRect(point)) //判斷是否在本應用程式視窗內
{
isshowmain=false;
}
KillTimer(8);
issettimer8=false;
ReleaseCapture();
break;
}
return CDialog::WindowProc(message, wParam, lParam);
}
ReleaseCapture();//該函式從當前執行緒中的視窗釋放滑鼠捕獲,並恢復通常的滑鼠輸入處理。捕獲滑鼠的視窗接收所有的滑鼠輸入(無論游標的位置在哪裡),除非點選滑鼠鍵時,游標熱點在另一個執行緒的視窗中