_TrackMouseEvent
轉(zhuǎn)自http://blog.csdn.net/zhuzhubin/article/details/4368040
默認(rèn)情況下,窗口是不響應(yīng) WM_MOUSELEAVE 和 WM_MOUSEHOVER 消息的,所以要使用 _TrackMouseEvent 函數(shù)來激活這兩個(gè)消息。調(diào)用這個(gè)函數(shù)后,當(dāng)鼠標(biāo)在指定窗口上停留超過一定時(shí)間或離開窗口后,該函數(shù)會(huì) Post 這兩個(gè)消息到指定窗口。
使用方法:
1. 在對話框類中定義一個(gè)變量來標(biāo)識(shí)是否追蹤當(dāng)前鼠標(biāo)狀態(tài),之所以要這樣定義是要避免鼠標(biāo)已經(jīng)在窗體之上時(shí),一移動(dòng)鼠標(biāo)就不斷重復(fù)產(chǎn)生 WM_MOUSEHOVER 。
BOOL _bMouseTrack=TRUE ;
2. 在 OnMouseMove 中調(diào)用 _TrackMouseEvent 函數(shù)
if (_bMouseTrack) // 若允許 追蹤,則。
{
TRACKMOUSEEVENT csTME;
csTME.cbSize = sizeof (csTME);
csTME.dwFlags = TME_LEAVE|TME_HOVER;
csTME.hwndTrack = m_hWnd ;// 指定要 追蹤 的窗口
csTME.dwHoverTime = 10; // 鼠標(biāo)在按鈕上停留超過 10ms ,才認(rèn)為狀態(tài)為 HOVER
::_TrackMouseEvent (&csTME); // 開啟 Windows 的 WM_MOUSELEAVE , WM_MOUSEHOVER 事件支持
_bMouseTrack=FALSE ; // 若已經(jīng) 追蹤 ,則停止 追蹤
}
3. 在 OnMouseLeave 中再次允許追蹤鼠標(biāo)狀態(tài)
_bMouseTrack=TRUE ;
4. 備注:這兩個(gè)消息的映射要自己寫
ON_MESSAGE(WM_MOUSEHOVER,OnMouseHover)
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
posted on 2011-07-12 15:25 厚積薄發(fā) 閱讀(462) 評論(0) 編輯 收藏 引用 所屬分類: Windows編程

