默認情況下,窗口是不響應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.這樣就可以響應這兩個消息就可以響應了!