1. 程式人生 > >滑鼠懸停在按鈕上延時響應OnMouseHover、OnMouseMove和OnMouseLeave

滑鼠懸停在按鈕上延時響應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