如何在list控件中响应右键弹出菜单中的菜单事件

 我来答
就烦条0o
2017-02-10 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46492
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
当你在list控件中右键单击的时候可以正常弹出菜单,但是当你选择菜单的功能的时候却没有反应,这是为什么呢?原因很简单,菜单事件处理消息是主窗口处理的,而你是在子窗口(list)中选择的,传入的窗口指针是子窗口的,处理消息的自然也是子窗口的,但是子窗口并没有处理相应消息的事件处理程序,所以才会有在list控件中右键菜单中的事件并没有响应。解决的办法可以说也是很简单的,就是把消息传给父窗口处理.

代码如下:

CMenu menu;
if (!menu.LoadMenu(IDR_MENU1))
{
AfxMessageBox(_T("加载快捷菜单失败"));
return;
}
//获取子菜单,因为只有一个快捷菜单,所以子菜单就是0(第一个)
CMenu* pPopMenu = menu.GetSubMenu(0);
pPopMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWnd->GetParent());

把TrackPopupMenu的最后一个参数(pWnd)改为pWnd->GetParent(),这样当你传入的窗口指针是list 的时候,它也会去通知父窗口来处理菜单消息.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式