如何在list控件中响应右键弹出菜单中的菜单事件
1个回答
展开全部
当你在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 的时候,它也会去通知父窗口来处理菜单消息.
代码如下:
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 的时候,它也会去通知父窗口来处理菜单消息.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询