OnContextMenu 和OnRButtonDown问题

zary_linux 2006-11-14 06:52:56
单独用OnContextMenu 可以弹出菜单。
但加上OnRButtonDown:如果OnRButtonDown里只用一个TextOut输出文字的话
OnContextMenu可以弹出菜单。
如果OnRButtonDown里用一个Message输出文字的话OnContextMenu就没用了。
这是怎么回事啊?
到底OnContextMenu和OnRButtonDown是什么关系?谁先调用啊?为什么OnContextMenu有时候调用有时候不调用啊?
...全文
1172 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
youngwolf 2006-11-16
  • 打赏
  • 举报
回复
up的时候,系统已经完整的生成了WM_CONTEXTMENU消息了,就在消息队列里面。

你一定是在CWnd的OnRButtonUp重载函数里弹出MessageBox吧,你看看MSDN中的说明吧,
此时系统已经得到了WM_RBUTTONUP消息了,这并不是截获WM_RBUTTONUP消息!
要截获消息有另外的函数,你把WM_RBUTTONUP截获了,你看还会不会响应OnContextMenu!

这个问题信不信就由你了,我不再回答了。
zary_linux 2006-11-15
  • 打赏
  • 举报
回复
由于这个MessageBox是模态的,所以以后的消息都不会发给主窗口了
---------------------------------------------------------------
好象不对吧。
例如鼠标右键up的时候弹出MessageBox,但是OnContextMenu里的还是执行了。
如果是鼠标右键down的时候弹出MessageBox,OnContextMenu就不执行了 。
youngwolf 2006-11-14
  • 打赏
  • 举报
回复
好多消息都是这样的啊,必须由多个消息依次发生才会产生那个消息,比如WM_CHAR等,你在鼠标压下是弹出一个MessageBox,由于这个MessageBox是模态的,所以以后的消息都不会发给主窗口了,主窗口被阻塞,等到MessageBox被关闭后,消息已经被接收,不存在了.
zary_linux 2006-11-14
  • 打赏
  • 举报
回复
当鼠标压下,鼠标弹起两个消息依次发生,才会发生OnContextMenu消息.
你在OnRButtonDown里用一个Message输出文字,则后面的鼠标弹起消息被MessageBox接受了.故OnContextMenu没有被调用.

-------------------------------------------------------
能否讲下原理?里面调用的细节。谢谢
neosu 2006-11-14
  • 打赏
  • 举报
回复
OnRButtonDown就是鼠标右键消息.

但"ContextMenu"不一定是鼠标右键触发的. 比如按windows键盘上的属性键,或按shift+F10都是ContextMenu.

所以, 不要使用OnRButtonDown取代OnContextMenu
youngwolf 2006-11-14
  • 打赏
  • 举报
回复
当鼠标压下,鼠标弹起两个消息依次发生,才会发生OnContextMenu消息.
你在OnRButtonDown里用一个Message输出文字,则后面的鼠标弹起消息被MessageBox接受了.故OnContextMenu没有被调用.

15,979

社区成员

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

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