1. 程式人生 > >mfc 如何捕獲應用程式視窗以外的滑鼠事件

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();//該函式從當前執行緒中的視窗釋放滑鼠捕獲,並恢復通常的滑鼠輸入處理。捕獲滑鼠的視窗接收所有的滑鼠輸入(無論游標的位置在哪裡),除非點選滑鼠鍵時,游標熱點在另一個執行緒的視窗中