关于TrackPopupMenuEx()

hhh_hao 2011-03-17 04:58:03
实现鼠标放在按钮上弹出一个菜单(TrackPopupMenuEx())的功能,

不过我发现当菜单弹出的时候虽然鼠标还在按钮的上方。但是这时按钮会收到WM_MOUSELEAVE消息,我是通过TrackMouseEvent函数来判断鼠标是否离开控件的, 有什么办法解决这个问题吗?
...全文
221 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhh_hao 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 fishion 的回复:]

引用 6 楼 hhh_hao 的回复:
用了PtinRect的方法,

还有新问题,当菜单弹出之后,鼠标离开按钮时, 收不到WM_MOUSELEAVE消息

俺的方法里根本就没用到WM_MOUSELEAVE消息

[/Quote]

是所有的消息都没了
fishion 2011-03-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hhh_hao 的回复:]
用了PtinRect的方法,

还有新问题,当菜单弹出之后,鼠标离开按钮时, 收不到WM_MOUSELEAVE消息
[/Quote]
俺的方法里根本就没用到WM_MOUSELEAVE消息









论坛签名======================================================================

hhh_hao:你好!
截至 2011-03-17 16:58:03 前:
你已发帖 27 个, 未结贴 4 个;
结贴率为: 85.19%

当您的问题得到解答后请及时结贴.

http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html

如何给分和结贴?
http://community.csdn.net/Help/HelpCenter.htm#结帖

如何给自己的回帖中也加上签名?
http://blog.csdn.net/q107770540/archive/2011/03/15/6250007.aspx
hhh_hao 2011-03-17
  • 打赏
  • 举报
回复
基本上来说呢 就是:
1.当鼠标停在Button上时 触发弹出menu的事件
2.当鼠标移动到另一个Button上时 弹出另一个menu
3.如果鼠标没有移动到新的Button上时 已弹出的menu不消失
有些类似于“开始”菜单的样子

我用TPopupMenu可以实现弹出的功能 但是当TPopupMenu弹出后 就无法再响应MouseMove这个事件了

高手请快出手~~
hhh_hao 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xianglitian 的回复:]

你把鼠标移到按钮上没有任何动作就出菜单?
那不是tooltip的效果么
为什么这么做
[/Quote]

相当于主菜单弹子菜单的效果,这个有很多的吧
向立天 2011-03-17
  • 打赏
  • 举报
回复
你把鼠标移到按钮上没有任何动作就出菜单?
那不是tooltip的效果么
为什么这么做
hhh_hao 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 huangcheng90 的回复:]

引用 6 楼 hhh_hao 的回复:

用了PtinRect的方法,

还有新问题,当菜单弹出之后,鼠标离开按钮时, 收不到WM_MOUSELEAVE消息

你在PreTranslateMessage里面判断一下WM_MOUSEENTER之类的消息和窗口句柄,如果句柄是菜单就发送WM_MOUSELEAVE消息给按钮试试..
[/Quote]

这样的会没完没了的,太麻烦了吧,
Dreadnought 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hhh_hao 的回复:]

用了PtinRect的方法,

还有新问题,当菜单弹出之后,鼠标离开按钮时, 收不到WM_MOUSELEAVE消息
[/Quote]
你在PreTranslateMessage里面判断一下WM_MOUSEENTER之类的消息和窗口句柄,如果句柄是菜单就发送WM_MOUSELEAVE消息给按钮试试..
hhh_hao 2011-03-17
  • 打赏
  • 举报
回复
用了PtinRect的方法,

还有新问题,当菜单弹出之后,鼠标离开按钮时, 收不到WM_MOUSELEAVE消息
Dreadnought 2011-03-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hhh_hao 的回复:]

有人说用hook能解决这个问题吗?
[/Quote]
还是判断PtinRect比较简单...
hhh_hao 2011-03-17
  • 打赏
  • 举报
回复
有人说用hook能解决这个问题吗?
Eleven 2011-03-17
  • 打赏
  • 举报
回复
判断一下当前GetCursorPos()的CPoint是否在按钮的区域内?CRect::PtInRect();
fishion 2011-03-17
  • 打赏
  • 举报
回复
弄个定时器,定时用GetCursorPos来得到鼠标的位置,用GetWindowRect得到控件的大小坐标,再用PtInRect来判断鼠标是否在控件在
shenyi0106 2011-03-17
  • 打赏
  • 举报
回复
菜单也是窗口,你窗口切换了,肯定是要受到离开消息的
有两个方法:
1.计算弹出坐标时,和鼠标间留一定的空隙(不知道是否可行,可以测试一下)
2.在收到鼠标离开消息时,判断一下窗口,如果是你的菜单,则不处理

15,979

社区成员

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

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