VC对话框如何检测鼠标离开窗体的事件?(转载自CSDN) 2010-12-2 12:06
来源:互联网 发布:车博士绿色空间 知乎 编辑:程序博客网 时间:2024/06/03 23:41
1 把下面代码加进对话框的WM_MOUSEMOVE的消息响应中
TRACKMOUSEEVENT tme;
tme.cbSize=sizeof(TRACKMOUSEEVENT);
tme.dwFlags=TME_HOVER | TME_LEAVE;
tme.dwHoverTime=HOVER_DEFAULT;
tme.hwndTrack=m_hWnd;
if(!_TrackMouseEvent(&tme))
AfxMessageBox("鼠标事件捕捉失败!");
2 然后你直接可以用下面代码在PreTranslateMessage函数中接收,不需要自己写WM_MOUSELEASE和WM_MOUSEHOVER消息的响应函数(当然你要自己写也行):
if(pMsg->message==WM_MOUSELEAVE)
AfxMessageBox("mouse leave");
return CDialog::PreTranslateMessage(pMsg);
这样就可以了,不过这种方法的不足之处是:当用上面代码时,鼠标移进窗体中子窗口范围内时也算离开了m_hWnd窗口,这也是一个Bug。当你只想检测鼠标是否离开一个子窗口内时_TrackMouseEvent是很好用的函数(在VC中别把前面的下划线给忘了^_^)。
这两个消息比较古怪,虽然你能找到他们的定义,看起来也似乎挺有用,但是却接收不到。刚才csdn有人问到这个问题,我就随手答了一下,随便贴到这里,以做保存。
----------------------------------------
WM_MOUSELEAVE ,WM_MOUSEENTER 应该算是个自定义的消息,因为Windows通常都不会发送这个消息。只有你调用TrackMouseEvent 才会收到这个消息。
实际上这个消息 是 TrackMouseEvent 而不是windows 发出的。很奇怪微软会定义出这样子的API。而且TrackMouseEvent 个人感觉也不大好用(主要是感觉别扭,不是说功能不行)。其实TrackMouseEvent 的原理也蛮简单的,自己三两句语句就搞定了,不必理会微软搞的这个古里古怪的API,还得去查找消息定义。
原理如下:
鼠标在窗口区域时会收到MouseMove消息,第一次收到这个消息时 就是 WM_MOUSEENTER。
On_MouseMove(...)
{
static BOOL bFirst = TRUE;
if (bFirst)
{
// PostMessage(WM_MOUSEENTER...) or call some function.
bFirst = FALSE;
SetTimer(...);
}
}
在 Mouse Enter 自后启动了一个计时器, 通常100ms 就足够了。计时器里检测鼠标是否离开。
On_Timer(...)
{
...
GetCursorPos(pt);
GetWindowRect(rect);
if (PtInRect(&rect,pt))
{
KillTimer(...); // kill self.
PostMessage(WM_MOUSELEAVE...); // or call some function.
}
}
- VC对话框如何检测鼠标离开窗体的事件?(转载自CSDN) 2010-12-2 12:06
- VC对话框如何检测鼠标离开窗体的事件?
- VC窗体获取鼠标离开事件
- VC 怎么实现对鼠标离开对话框时,事件的处理
- 捕捉鼠标离开对话框事件
- c++ builder里四种处理“鼠标离开窗体”事件的方法
- VC中控件或者对话框的鼠标离开消息
- VC++如何添加鼠标停留和离开的消息
- c++ builder里四种处理“鼠标离开窗体”事件的方法 转
- VC:透明窗体+接收鼠标事件
- 鼠标离开事件集
- 如何处理窗口的鼠标离开消息
- 如何处理鼠标离开窗口的消息
- easyui text如何 绑定 鼠标离开时间 及blur 事件
- imagebutton的鼠标悬停事件:鼠标指向时显示图片1,鼠标离开时显示图片2
- VC++鼠标进入离开窗口
- VC 定时自动关闭MessageBox弹出对话框 (2010-12-15 15:28:06)转载▼
- [VC] 鼠标事件的响应
- LVS负载均衡中arp_ignore和arp_annonuce参数配置的含义
- 服务器应用程序不可用
- 利用MFC消息映射机制自定义消息
- 【转】如何在MATLAB中使用窗函数
- Android使用GridView实现日历功能(详细代码)
- VC对话框如何检测鼠标离开窗体的事件?(转载自CSDN) 2010-12-2 12:06
- 项目开发设计文档主要内容
- VC中使用CMarkup类操作XML 2010-12-2 12:08
- WEB缓存
- 学习环境变量(VC的环境变量)
- Quartz 2D编程指南1-------Quartz 2D概述
- javascript之数组操作
- CListCtrl的用法(总结的比较详细,在此转载) 2010-12-6 21:30
- 常用的DOS命令