滑鼠懸停在按鈕上響應OnMouseHover、OnMouseMove和OnMouseLeave
1.建立MFC程式
2.新增按鈕,IDC_BUTTON1
3.新增類,直接右鍵控制元件時無法新增CButton的派生類的,如果想新增的話,只能選中專案根,右鍵新增類,MFC類-->MFC類嚮導-->選擇繼承CButton。
4.新增變數,選中按鈕,右鍵新增變數,mbt1,型別為CBtn//沒有這個變數是不行的,我試了n次都沒有成功,缺少這個沒有反應
5.開啟類嚮導,在類CBtn下新增訊息OnMouseHover、OnMouseMove和OnMouseLeave
6.在btn.h中public下新增bool m_bTracking;
在btn.cpp中在類的建構函式中新增m_bTracking=0;//初始化,新增的訊息對應如下,實現的功能是當游標在按鈕上懸停1後開啟網頁:
void CBtn::OnMouseHover(UINT nFlags, CPoint point)
{
// TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值
ShellExecute(0, NULL, _T("http://hao.360.cn"), NULL, NULL, SW_NORMAL);
m_bTracking = false;
CButton::OnMouseHover(nFlags, point);
}
void CBtn::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值
if (!m_bTracking)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.dwFlags =TME_HOVER;//要觸發的訊息
tme.hwndTrack = this->m_hWnd;
tme.dwHoverTime = 1000;// 若不設此引數,則無法觸發mouseHover
if (::_TrackMouseEvent(&tme)) //MOUSELEAVE|MOUSEHOVER訊息由此函式觸發
{
//::_TrackMouseEvent(&tme);
m_bTracking = true;
}
}
CButton::OnMouseMove(nFlags, point);
}
void CBtn::OnMouseLeave()
{
// TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值
m_bTracking = false;
CButton::OnMouseLeave();
}
參考http://blog.chinaunix.net/uid-26275986-id-3877610.html