關於MFC中WM_MOUSEHOVER和WM_MOUSELEAVE消息的使用

默認情況下,窗口是不響應WM_MOUSELEAVE和WM_MOUSEHOVER消息的,所以要使用_TrackMouseEvent函數來激活這兩個消息。調用這個函數後,當鼠標在指定窗口上停留超過一定時間或離開窗口後,該函數會Post這兩個消息到指定窗口。

使用方法:


1.在對話框類中定義一個變量來標識是否追蹤當前鼠標狀態,之所以要這樣定義是要避免鼠標已經在窗體之上時,一移動鼠標就不斷重複產生WM_MOUSEHOVER。

BOOL _bMouseTrack=TRUE;


2.在OnMouseMove中調用_TrackMouseEvent函數

 if (_bMouseTrack)    //若允許追蹤,則。
 {
  TRACKMOUSEEVENT csTME;
  csTME.cbSize = sizeof(csTME);
  csTME.dwFlags = TME_LEAVE|TME_HOVER;
  csTME.hwndTrack = m_hWnd;//指定要追蹤的窗口
  csTME.dwHoverTime = 10;  //鼠標在按鈕上停留超過10ms,才認爲狀態爲HOVER
  ::_TrackMouseEvent(&csTME); //開啓Windows的WM_MOUSELEAVE,WM_MOUSEHOVER事件支持
  _bMouseTrack=FALSE;   //若已經追蹤,則停止追蹤
 }


3.在OnMouseLeave中再次允許追蹤鼠標狀態

_bMouseTrack=TRUE; 因爲跟蹤是一次性的,觸發了一次以後必須重新設置允許跟蹤!!!


4.這樣就可以響應這兩個消息就可以響應了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章