VC编程时关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息
来源:互联网 发布:张艺兴团宠 知乎 编辑:程序博客网 时间:2024/06/06 00:02
这两个消息比较古怪,虽然你能找到他们的定义,看起来也似乎挺有用,但是却接收不到。
如果要处理这两个消息需要手动在WM_MOUSEMOVE消息处理函数中添加:
添加变量:
BOOL m_bTracking;
m_bTracking = FALSE;
添加消息处理函数:
afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnMouseHover(WPARAM wParam, LPARAM lParam);
用ON_MESSAGE宏进行消息映射:
ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
在WM_MOUSEMOVE消息处理函数中进行处理:
void CDemo::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
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);
}
}
LRESULT CDemo::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
return 0;
}
LRESULT CDemo::OnMouseHover(WPARAM wParam, LPARAM lParam)
{
return 0;
}
WM_MOUSELEAVE ,WM_MOUSEENTER 应该算是个自定义的消息,因为Windows通常都不会发送这个消息。只有你调用TrackMouseEvent 才会收到这个消息。
实际上这个消息 是 TrackMouseEvent 而不是windows 发出的。很奇怪微软会定义出这样子的API。而且TrackMouseEvent 个人感觉也不大好用(主要是感觉别扭,不是说功能不行)。其实TrackMouseEvent 的原理也蛮简单的,自己三两句语句就搞定了,不必理会微软搞的这个古里古怪的API,还得去查找消息定义。
原理如下:
鼠标在窗口区域时会收到MouseMove消息,第一次收到这个消息时 就是 WM_MOUSEENTER。
On_MouseMove(...)
{
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编程时关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息
- VC编程时关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息
- 关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息。
- WM_MOUSELEAVE和WM_MOUSEHOVER消息
- 关于 控件 的鼠标效应消息 WM_MOUSELEAVE 和WM_MOUSEHOVER
- 关于MFC中WM_MOUSEHOVER和WM_MOUSELEAVE消息的使用
- WM_MOUSELEAVE 消息
- 使用_TrackMouseEvent捕获WM_MOUSELEAVE和WM_MOUSEHOVER消息
- _TrackMouseEvent 响应 WM_MOUSELEAVE 和 WM_MOUSEHOVER 消息
- 使用_TrackMouseEvent捕获WM_MOUSELEAVE和WM_MOUSEHOVER消息
- WM_MOUSEHOVER和WM_MOUSELEAVE消息的触发
- [Win32SDK基本]WM_MOUSELEAVE消息和TrackMouseEvent
- 关于WM_MOUSEHOVER和WM_MOUSELEAVE消息的用法以及按钮的变色问题!
- 捕捉鼠标停留WM_MOUSEHOVER和离开WM_MOUSELEAVE消息
- 捕捉鼠标停留WM_MOUSEHOVER和离开WM_MOUSELEAVE消息
- 捕捉鼠标停留WM_MOUSEHOVER和离开WM_MOUSELEAVE消息
- 让窗口捕获并响应WM_MOUSEHOVER和WM_MOUSELEAVE消息
- WM_MOUSELEAVE和WM_MOUSEHOVER使用
- HBase专题介绍 2
- *9-1-2 分段函数(switch)
- 分段函数。
- linux系统如何查看内存使用情况
- 发现文章抄袭(张小娴 or XX)
- VC编程时关于 WM_MOUSEENTER 和 WM_MOUSELEAVE消息
- Android开发——自动连接指定SSID的wifi热点(不加密/加密)
- WebService之XFire+Spring集成(使用注解)
- 分段函数求值
- 我的WCF之旅
- 给两个已序数组,写一个函数求出第K小的数(听说是GOOGLE给出的题)
- java servlet 实现图片验证码
- Winedt 使用技巧
- 本月有几天?