轉自http://blog.csdn.net/zhuzhubin/article/details/4368040
默認情況下,窗口是不響應 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. 備注:這兩個消息的映射要自己寫
ON_MESSAGE(WM_MOUSEHOVER,OnMouseHover)
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)