下面以按鈕爲例闡述:
首先給對話框類添加一個新類:CNewButton類
我們都知道有關鼠標的移動事件通常是WM_MOUSEMOVE,它表示鼠標滑過按鈕事件。
但有時我們需要知道鼠標停靠在按鈕上的事件和鼠標離開按鈕上的事件。只有WM_MOUSEMOVE
是不能滿足我們的要求的。我們需要WM_MOUSEHOVER和WM_MOUSELEAVE事件,這兩個消息
系統是有定義的。但並不像WM_MOUSEMOVE可以直接用,它需要觸發。
我們需要TRACKMOUSEEVENT 這個東東來幫我們:
TRACKMOUSEEVENT tme;
tme.cbSize=sizeof(tme);//確定大小
tme.dwFlags=TME_HOVER|TME_LEAVE;//可以產生的消息組合
tme.dwHoverTime=0;// 鼠標的停靠時間
tme.hwndTrack=m_hWnd;//鼠標關聯的窗口
_TrackMouseEvent(&tme);//這個函數可以跟蹤鼠標事件
以上這段代碼是放在WM_MOUSEMOVE 消息處理函數中的
另外還需要添加消息處理函數的聲明,以WM_MOUSEHOVER爲例
在新類CNewButton的頭文件中添加:
afx_msg void OnMouseHover(WPARAM wParam,LPARAM lParam);
在其源文件中添加:
ON_MESSAGE(WM_MOUSEHOVER,OnMouseHover)
void CNewButton::OnMouseHover(WPARAM wParam,LPARAM lParam)
{}
當然上面的跟蹤鼠標事件的方法可以應用到其它窗口上去。重繪按鈕時就會用到以上的方法