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

当你在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 的时候,它也会去通知父窗口来处理菜单消息.

你可能感兴趣的:(指针,右键菜单,控件,list控件)