OnContextMenu 和OnRButtonDown问题

OnContextMenu 和OnRButtonDown问题

楼主zary_linux(诚实、信用) 2006-11-14 18:52:56 在 VC/MFC / 界面 提问

单独用OnContextMenu   可以弹出菜单。  
  但加上OnRButtonDown:如果OnRButtonDown里只用一个TextOut输出文字的话  
  OnContextMenu可以弹出菜单。  
  如果OnRButtonDown里用一个Message输出文字的话OnContextMenu就没用了。  
  这是怎么回事啊?  
  到底OnContextMenu和OnRButtonDown是什么关系?谁先调用啊?为什么OnContextMenu有时候调用有时候不调用啊? 问题点数:20、回复次数:6Top

1 楼yang79tao()回复于 2006-11-14 19:12:51 得分 0

当鼠标压下,鼠标弹起两个消息依次发生,才会发生OnContextMenu消息.  
  你在OnRButtonDown里用一个Message输出文字,则后面的鼠标弹起消息被MessageBox接受了.故OnContextMenu没有被调用.Top

2 楼neosu(CrazyNeo)回复于 2006-11-14 19:13:49 得分 10

OnRButtonDown就是鼠标右键消息.  
   
  但"ContextMenu"不一定是鼠标右键触发的.   比如按windows键盘上的属性键,或按shift+F10都是ContextMenu.  
   
  所以,   不要使用OnRButtonDown取代OnContextMenuTop

3 楼zary_linux(诚实、信用)回复于 2006-11-14 20:25:39 得分 0

当鼠标压下,鼠标弹起两个消息依次发生,才会发生OnContextMenu消息.  
  你在OnRButtonDown里用一个Message输出文字,则后面的鼠标弹起消息被MessageBox接受了.故OnContextMenu没有被调用.  
   
  -------------------------------------------------------  
  能否讲下原理?里面调用的细节。谢谢Top

4 楼yang79tao()回复于 2006-11-14 21:43:23 得分 0

好多消息都是这样的啊,必须由多个消息依次发生才会产生那个消息,比如WM_CHAR等,你在鼠标压下是弹出一个MessageBox,由于这个MessageBox是模态的,所以以后的消息都不会发给主窗口了,主窗口被阻塞,等到MessageBox被关闭后,消息已经被接收,不存在了.Top

5 楼zary_linux(诚实、信用)回复于 2006-11-15 10:15:07 得分 0

由于这个MessageBox是模态的,所以以后的消息都不会发给主窗口了  
  ---------------------------------------------------------------  
  好象不对吧。  
  例如鼠标右键up的时候弹出MessageBox,但是OnContextMenu里的还是执行了。  
  如果是鼠标右键down的时候弹出MessageBox,OnContextMenu就不执行了   。Top

6 楼yang79tao()回复于 2006-11-16 19:23:56 得分 10

up的时候,系统已经完整的生成了WM_CONTEXTMENU消息了,就在消息队列里面。  
   
  你一定是在CWnd的OnRButtonUp重载函数里弹出MessageBox吧,你看看MSDN中的说明吧,  
  此时系统已经得到了WM_RBUTTONUP消息了,这并不是截获WM_RBUTTONUP消息!  
  要截获消息有另外的函数,你把WM_RBUTTONUP截获了,你看还会不会响应OnContextMenu!  
   
  这个问题信不信就由你了,我不再回答了。

你可能感兴趣的:(linux,windows,UP)