VC++鼠标进入离开窗口
2016-06-13 18:37
465 查看
思路:其实windows是有WM_MOUSELEAVE(鼠标离开)和WM_MOUSEHOVER(鼠标进入)消息的,不过它们需要我们手动来打开才可以使用
下面我要实现每次鼠标移入窗口调用OnMouseHover函数,每次鼠标移出窗口调用OnMouseLeave函数
afx_msg LRESULT OnMouseLeave(WPARAM, LPARAM);
afx_msg LRESULT OnMouseHover(WPARAM, LPARAM);
ON_WM_MOUSEMOVE()
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
ON_MESSAGE(WM_MOUSEHOVER,OnMouseHover)
END_MESSAGE_MAP()
{
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;
}
下面我要实现每次鼠标移入窗口调用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;
}
相关文章推荐
- C语言的执行
- curl学习(一):段错误
- c语言文件操作
- 实现单向链表的基本功能
- [C++ 面试基础知识总结] 顺序容器
- C++ STL使用说明
- Effective C++ 笔记一 :让自己习惯C++
- C++析构函数为什么要为虚函数
- 线程的创建与使用
- float 在内存中的储存方式
- 如何在C++中调用C程序?(讲的比较清楚)
- C++笔记 - 函数传参数学习
- C++类与内存分配
- 二维数组的深度解剖
- 【C/C++】计算二进制中的1的简单方法
- 简单总结C++中指针常量与常量指针的区别
- C++使用内存库接口示例
- [c++]最大流算法
- C语言函数二维数组传递方法
- C语言实现字符转unix时间戳的简单实例