作者:朱金灿
来源:http://blog.csdn.net/clever101
同事问我一个同事问我:我在视图客户区上新建了一个树形控件(对应为CTreeCtrl类的派生类CTreeFileCtrl),右键单击它弹出一个右键菜单。我分别在框架类和视图类上为这些菜单项添加了命令消息函数,可是我单击这些菜单项都无法响应。同事的程序的界面如下:
开始我也有点迷惑,回家后去翻《深入浅出MFC》。按说右键菜单的消息属于WM_COMMAND类型。任何派生自CCmdTarget类的类都可以接收WM_COMMAND消息。如果是标准菜单栏上的消息,遵循的是VIEW——〉Frame窗口本身——〉CWinApp对象的顺序。但是右键菜单呢?
上微软技术论坛问了蒋晟大侠,知道原来是看右键菜单是否有转发WM_COMMAND。
那么什么是右键菜单的目标窗口,最后查了MSDN的CMenu类的TrackPopupMenu函数的用法,明白了:
BOOL TrackPopupMenu(
UINT nFlags,
int x,
int y,
CWnd* pWnd,
LPCRECT lpRect = 0
);
这是实现弹出右键菜单功能的函数,其中我们看看MSDN对第四个参数pWnd的解释:
Identifies the window that owns the pop-up menu. This window receives all WM_COMMAND messages from the menu. In Windows versions 3.1 and later, the window does not receive WM_COMMAND messages until TrackPopupMenu returns. In Windows 3.0, the window receives WM_COMMAND messages before TrackPopupMenu returns.
下面以我拙劣的翻译水平翻译一下:这是用来标识拥有这个菜单的窗口的。这个窗口接收这个菜单栏的所有WM_COMMAND消息。在Windows 3.1及更新的版本,这个窗口不接收任何WM_COMMAND消息直到TrackPopupMenu函数返回(就是只有调用了TrackPopupMenu函数这个窗口才处理WM_COMMAND消息)。在Windows 3.0,在TrackPopupMenu函数返回之前窗口就接收WM_COMMAND。就是说这个参数指定了在这个窗口处理菜单的WM_COMMAND消息。开始我还以为这个参数指定了菜单的父窗口呢,网上也有类似的误导人的说法。实际上父窗口一说是经不起推敲的,如果说这个是父窗口,那么菜单是它的子窗口,但是你要知道,菜单并不是窗口啊!MSDN上明明白白写着:class CMenu : public CObject。
分享到:
相关推荐
C#WPF 右键菜单 显示 事件触发 测试通过 <!-- 设置右键菜单 --> 编辑"> <!-- 调用系统命令 --> <MenuItem Command="Copy"></MenuItem> <MenuItem Command="Cut"></MenuItem> <MenuItem Command="Paste">...
树形控件中右键菜单的添加和响应,有助于开发人员更好的实现菜单功能
ListControl控件中右键菜单可添加或删除一行,选中一行可进行edit编辑和下拉框Combox选择。
屏蔽标题栏右键系统菜单及按钮 屏蔽标题栏右键系统菜单及按钮 屏蔽标题栏右键系统菜单及按钮
完全代码实现右键菜单。编译器使用VC6.0。
这是一款基于bootstrap的jquery右键菜单插件。该bootstrap右键菜单使用Bootstrap dropdown组件来制作,并通过tether插件进行定位,具有多级菜单,灵活,响应式等特点。
vs2010 MFC程序最小化到托盘,右键弹出菜单进行设置和退出,双击桌面最前显示
VLC官网发布的库文件默认不支持鼠标双击及右键单击响应,自己编译了VLC2.2.1源码,支持鼠标双击响应及右键响应,可供开发时使用。
本资源为本人自己从搜刮而来 如果使用或不能解决你的问题 请留言把问题说清楚! 有空上线我会帮你解决! 本人其他资源请前往以下地址http://a63822322.download.csdn.net/
使用Visual Studio2019的MFC对话框项目,实现了右键菜单。但是,本项目的”图形“功能有一个bug尚未解决,圆圈会不停移动,造成程序不响应,原因是不知道如何接收WM_xxx消息,希望有人告诉我。
实现JLabel右键进行响应的操作,摆脱按钮响应,大幅度提高界面的美观
以重载方式响应CListBox右键,为回答网友问题的资源,不知道为什么上一次没传上去。
就是若把页面右键屏蔽的话,文本框上的右键菜单同样也给屏蔽,问如何能够将文本框的右键菜单显示出来。 解决思路:首先,要在页面初始化时将页面右键菜单屏蔽 其次,在欲解除右键限制的文本框获得焦点时,启用...
CListBox响应右键菜单,为回答网友问题上传的资源,重载了pretranslatemessage。
一个很好的右键自绘菜单,能响应点击,更改菜单项、禁用菜单、勾选等等功能,并且能把顶级菜单做成自绘的样式。
鼠标右键菜单咋sivlerlight 4版本以前是没法实现,在silverlight 4上微软提供了鼠标右键的响应事件,所以实现起来比较方便。鼠标右键菜单弹出
常用的js控件,有日期和右键菜单,内容非常的详细,下载了别忘了评价和加分啊 常用的js控件,有日期和右键菜单,内容非常的详细,下载了别忘了评价和加分啊
XP系统下 去掉Intel集成显卡右键菜单,提高右键弹出,刷新速度,提高系统响应!
CListBox响应右键菜单-重载CLISTBOX方式,该资源为验证网友所提问题而写。
jQuery ContexMenu 右键菜单 有时候我们也可以叫做快键菜单。例如我们在电脑桌面右键所看到的菜单就是快捷菜单,也叫上下文菜单,叫上下文菜单是因为Context翻译成为上下文的意思 创建上下文ContextMenu菜单的步骤...