MFC使用TRACKMOUSEEVENT触发mouseHover和mouseLeave

Posted 2018shawn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC使用TRACKMOUSEEVENT触发mouseHover和mouseLeave相关的知识,希望对你有一定的参考价值。

 

为对话框添加WM_MOUSEHOVER或WM_MOUSELEAVE消息并不会响应。 MFC需要特殊处理,其中一法就是使用TRACKMOUSEEVENT

void CmfcDlgDlg::OnMouseMove(UINT nFlags, CPoint point)

    // TODO: 在此添加消息处理程序代码和/或调用默认值
    //GetDlgItem(IDC_BUTTON)->SetWindowText("Move");

    if (!m_bTracking)
    
        TRACKMOUSEEVENT tme;
        tme.cbSize = sizeof(TRACKMOUSEEVENT);
        tme.dwFlags = TME_LEAVE | TME_HOVER;//要触发的消息
        tme.hwndTrack = this->m_hWnd;
        tme.dwHoverTime = 10;// 若不设此参数,则无法触发mouseHover

        if (::_TrackMouseEvent(&tme)) //MOUSELEAVE|MOUSEHOVER消息由此函数触发
        
            m_bTracking = true;   
        
    

    CDialogEx::OnMouseMove(nFlags, point);



void CmfcDlgDlg::OnMouseHover(UINT nFlags, CPoint point)

    // TODO: 在此添加消息处理程序代码和/或调用默认值
    GetDlgItem(IDC_BUTTON)->SetWindowText("Hover");
    m_bTracking = false;
    CDialogEx::OnMouseHover(nFlags, point);



void CmfcDlgDlg::OnMouseLeave()

    // TODO: 在此添加消息处理程序代码和/或调用默认值
    GetDlgItem(IDC_BUTTON)->SetWindowText("Leave");
    m_bTracking = false;
    CDialogEx::OnMouseLeave();

 

以上是关于MFC使用TRACKMOUSEEVENT触发mouseHover和mouseLeave的主要内容,如果未能解决你的问题,请参考以下文章

如何围绕当前光标在MFC中的位置绘制一个矩形

TrackMouseEvent与_TrackMouseEvent

MFC 中Static text 如何响应鼠标hover事件?

delphi OnMouseLeave 事件不灵敏及解决之道(使用TrackMouseEvent函数进行加强)

在 MFC 中调用 EndDialog() 时,类析构函数何时触发?

MFC使用ListControl时,第一次左键点击ListControl的列表时无法触发NM_CLICK消息,点击第二次时才能触发