单独用OnContextMenu 可以弹出菜单。
但加上OnRButtonDown:如果OnRButtonDown里只用一个TextOut输出文字的话
OnContextMenu可以弹出菜单。
如果OnRButtonDown里用一个Message输出文字的话OnContextMenu就没用了。
这是怎么回事啊?
到底OnContextMenu和OnRButtonDown是什么关系?谁先调用啊?为什么OnContextMenu有时候调用有时候不调用啊? 问题点数:20、回复次数:6Top
当鼠标压下,鼠标弹起两个消息依次发生,才会发生OnContextMenu消息.
你在OnRButtonDown里用一个Message输出文字,则后面的鼠标弹起消息被MessageBox接受了.故OnContextMenu没有被调用.Top
OnRButtonDown就是鼠标右键消息.
但"ContextMenu"不一定是鼠标右键触发的. 比如按windows键盘上的属性键,或按shift+F10都是ContextMenu.
所以, 不要使用OnRButtonDown取代OnContextMenuTop
当鼠标压下,鼠标弹起两个消息依次发生,才会发生OnContextMenu消息.
你在OnRButtonDown里用一个Message输出文字,则后面的鼠标弹起消息被MessageBox接受了.故OnContextMenu没有被调用.
-------------------------------------------------------
能否讲下原理?里面调用的细节。谢谢Top
好多消息都是这样的啊,必须由多个消息依次发生才会产生那个消息,比如WM_CHAR等,你在鼠标压下是弹出一个MessageBox,由于这个MessageBox是模态的,所以以后的消息都不会发给主窗口了,主窗口被阻塞,等到MessageBox被关闭后,消息已经被接收,不存在了.Top
由于这个MessageBox是模态的,所以以后的消息都不会发给主窗口了
---------------------------------------------------------------
好象不对吧。
例如鼠标右键up的时候弹出MessageBox,但是OnContextMenu里的还是执行了。
如果是鼠标右键down的时候弹出MessageBox,OnContextMenu就不执行了 。Top
up的时候,系统已经完整的生成了WM_CONTEXTMENU消息了,就在消息队列里面。
你一定是在CWnd的OnRButtonUp重载函数里弹出MessageBox吧,你看看MSDN中的说明吧,
此时系统已经得到了WM_RBUTTONUP消息了,这并不是截获WM_RBUTTONUP消息!
要截获消息有另外的函数,你把WM_RBUTTONUP截获了,你看还会不会响应OnContextMenu!
这个问题信不信就由你了,我不再回答了。