VC++鼠标进入离开窗口

思路:其实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;
}






  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Barry__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值