1. 程式人生 > >處理滑鼠離開視窗的訊息 (WM_MOUSELEAVE)

處理滑鼠離開視窗的訊息 (WM_MOUSELEAVE)

WM_MOUSELEAVE 是滑鼠離開視窗時發出的訊息,但是這個訊息與普通的滑鼠訊息不同,要收到WM_MOUSELEAVE訊息必須先呼叫TrackMouseEvent,並且每呼叫一TrackMouseEvent 視窗只能收到一次WM_MOUSELEAVE,也就說如果要獲得WM_MOUSELEAVE訊息的話,當滑鼠重新進入視窗時必須呼叫一次TrackMouseEvent。

測試滑鼠是否在視窗內,以及滑鼠的離開使用TrackMouseEvent()在滑鼠離開視窗時傳送WM_MOUSELEAVE訊息使用TrackMouseEvent()還可以判斷滑鼠的停留,併發送WM_MOUSEHOVER訊息:

//設定一個狀態量用於記錄和標識滑鼠是否在視窗內
BOOL m_bMouseTracking;
//處理滑鼠移動訊息
void CXXXDlg::OnMouseMove(UINT nFlags,CPoint point)
{
   //接收到WM_MOUSEMOVE,而m_bMouseTracking為假時,滑鼠進入視窗。
   //設定_TrackMouseEvent
   TRACKMOUSEEVENT tme;
   tme.cbSize=sizeof(TRACKMOUSEEVENT); //監控滑鼠離開
   tme.dwFlags=TME_LEAVE;
   tme.hwndTrack=this->m_hWnd;
   if(::_TrackMouseEvent(&tme))
   {
     m_bMouseTracking=TRUE; //其他滑鼠進入時的操作
   }
   CDialog::OnMouseMove(nFlags, point);
}