OnContextMenu VS 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


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/everettjf/archive/2009/12/07/4959145.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值