鼠標停靠在按鈕上和鼠標離開按鈕時的觸發事件

下面以按鈕爲例闡述: 

首先給對話框類添加一個新類: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)

{}

當然上面的跟蹤鼠標事件的方法可以應用到其它窗口上去。重繪按鈕時就會用到以上的方法

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