我用了_trackmouseevent,可谓什么还是收不到wm_mouseleave消息??

解决方案 »

  1.   

    1、在头文件声明消息响应函数
    afx_msg void OnMouseLeave();
    BOOL m_bTrackLeave; //在构造函数中初始化
    2、在cpp文件定义消息响应函数
    void CIMyWin::OnMouseLeave()
    {
         MessageBox("鼠标已离开");
        m_bTrackLeave=FALSE;
    }
    3、添加消息映射
    ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
    4、调用_TrackMouseEvent();捕获鼠标离开的事件
    void CMyWin::OnMouseMove(UINT nFlags, CPoint point) 
    {
        if (!m_bTrackLeave)
        {// 鼠标第一次移入窗口时, 请求一个WM_MOUSELEAVE 消息
             TRACKMOUSEEVENT tme;
             tme.cbSize = sizeof(tme);
             tme.hwndTrack = m_hWnd;
             tme.dwFlags = TME_LEAVE;
             _TrackMouseEvent(&tme);
             m_bTrackLeave = TRUE;
        }
       CWnd::OnMouseMove(nFlags, point);
    }