您的位置:首页 > 编程语言 > C语言/C++

VC++鼠标进入离开窗口

2016-06-13 18:37 465 查看
思路:其实windows是有WM_MOUSELEAVE(鼠标离开)和WM_MOUSEHOVER(鼠标进入)消息的,不过它们需要我们手动来打开才可以使用

下面我要实现每次鼠标移入窗口调用OnMouseHover函数,每次鼠标移出窗口调用OnMouseLeave函数

声明一个变量,标识是否打开鼠标离开与进入的消息响应

bool m_bTracking;

增加三个消息的响应

声明:

afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg LRESULT OnMouseLeave(WPARAM, LPARAM);
afx_msg LRESULT OnMouseHover(WPARAM, LPARAM);

消息映射:

BEGIN_MESSAGE_MAP(CThreadDlg, CDialog)
ON_WM_MOUSEMOVE()
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
ON_MESSAGE(WM_MOUSEHOVER,OnMouseHover)
END_MESSAGE_MAP()

实现:

void CThreadDlg::OnMouseMove(UINT nFlags, CPoint point)
{
if (!m_bTracking)
{ //打开鼠标进入与离开的消息监听
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE | TME_HOVER;
tme.dwHoverTime = 1;
m_bTracking = _TrackMouseEvent(&tme);
}
CDialog::OnMouseMove(nFlags, point);
}
LRESULT CThreadDlg::OnMouseLeave(WPARAM wParam,LPARAM lParam)
{
m_bTracking = false;//每次进入重新打开,否则还是不会监听的
return 1;
}

LRESULT CThreadDlg::OnMouseHover(WPARAM wParam,LPARAM lParam)
{
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: