博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
VC++鼠标进入离开窗口
阅读量:3985 次
发布时间:2019-05-24

本文共 1020 字,大约阅读时间需要 3 分钟。

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

转载地址:http://zbxui.baihongyu.com/

你可能感兴趣的文章
如何构建高扩展性网站
查看>>
微服务架构的设计模式
查看>>
技术领导力:作为技术团队领导经常为人所忽略的技能和职责
查看>>
持续可用与CAP理论 – 一个系统开发者的观点
查看>>
nginx+tomcat+memcached (msm)实现 session同步复制
查看>>
c++数组指针和指针数组详解
查看>>
c++指针常量与常量指针详解
查看>>
c++字符数组和字符指针区别以及str***函数
查看>>
c++的string类初始化及其常用函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
STL分配器allocator
查看>>
STL::deque以及由其实现的queue和stack
查看>>
WPF与MVVM的实现(四)命令绑定
查看>>
WPF与MVVM的实现(三)List的数据绑定
查看>>
CS4344驱动
查看>>
WAV文件解析
查看>>
DAC输出音乐2-解决pu pu 声
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>