vc++如何判断鼠标移出了对话框啊?

ace_yong 2011-07-19 05:28:57
这个问题好纠结 我试了很多种方法,不甚理想,望大家指点指点迷津啊
...全文
356 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdl2005lyx 2011-08-12
  • 打赏
  • 举报
回复
WM_MOUSELEAVE事件 就可以。。。
向立天 2011-08-12
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法
pop1210 2011-07-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 pop1210 的回复:]
http://hi.baidu.com/pop1210/blog/item/c2184c35ab4f830591ef3945.html
-------
自己用Timer计时器模态判断也行~
[/Quote]
打错了,是模拟...
pop1210 2011-07-20
  • 打赏
  • 举报
回复
http://hi.baidu.com/pop1210/blog/item/c2184c35ab4f830591ef3945.html
-------
自己用Timer计时器模态判断也行~
ace_yong 2011-07-19
  • 打赏
  • 举报
回复
呵呵,是说得够详细了,兴许是我实在太菜了 不知道“然后给对话框添加 WM_MOUSELEAVE 消息

”是不是自己接自定义一个消息,像注册热键那样。。。
我采用的其中一种方法是下面这样的,却会造成鼠标“干扰”,不甚理想
void CMyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(!IsInDlg)
{
IsInDlg = TRUE;
SetCapture();
}
else
{
CRect rcClient;
GetClientRect(&rcClient);
if(!rcClient.PtInRect(point)) {
IsInDlg = FALSE;
//ReleaseCapture();
MessageBox("is out");
}
}
CDialog::OnMouseMove(nFlags, point);
Eleven 2011-07-19
  • 打赏
  • 举报
回复
WM_MOUSEHOVER
WM_MOUSELEAVE
psbeond 2011-07-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ace_yong 的回复:]
引用 1 楼 happyparrot 的回复:
在mousemove的时候
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE;
_TrackMouseEvent(&tme);
这样就可以收到wm_mouseleave消息了

……
[/Quote]

一楼给的代码还不够详细?
见习学术士 2011-07-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyparrot 的回复:]
在mousemove的时候
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE;
_TrackMouseEvent(&tme);
这样就可以收到wm_mouseleave消息了
[/Quote]++

给对话框添加 WM_MOUSEMOVE 消息

并添加用户一下代码

TRACKMOUSEEVENT TrackMouseEvent;
TrackMouseEvent.cbSize = sizeof(TrackMouseEvent);
TrackMouseEvent.dwFlags = TME_LEAVE;
TrackMouseEvent.hwndTrack = GetSafeHwnd();
TrackMouseEvent.dwHoverTime = HOVER_DEFAULT;
_TrackMouseEvent(&TrackMouseEvent);

然后给对话框添加 WM_MOUSELEAVE 消息

这个消息被响应了,那就是鼠标离开了对话框
ace_yong 2011-07-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyparrot 的回复:]
在mousemove的时候
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE;
_TrackMouseEvent(&tme);
这样就可以收到wm_mouseleave消息了
[/Quote]
可否麻烦您给点具体的代码啊 我是菜鸟!
快乐鹦鹉 2011-07-19
  • 打赏
  • 举报
回复
在mousemove的时候
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE;
_TrackMouseEvent(&tme);
这样就可以收到wm_mouseleave消息了

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧