当我按下子菜单 MFC 中的项目时如何获取事件?

How to get events when I press an item in a submenu MFC?

我正在创建一个类似 Windows 任务管理器的程序。
工作环境为visual c++6.0。

void CProcess01Dlg::OnRclickListCtrl(NMHDR* pNMHDR, LRESULT* pResult) {
    CPoint ptInList, ptInSrceen;
    GetCursorPos(&ptInSrceen); 
    ptInList = ptInSrceen;
    m_ctrlList.ScreenToClient(&ptInList);       

    POSITION pos = m_ctrlList.GetFirstSelectedItemPosition();
    int nListIndex = m_ctrlList.GetNextItem(-1, LVNI_SELECTED);

    CMenu menu, *pMenu;
    menu.LoadMenuA(IDR_MENU1);

    CString str;
    str.Format("%d",nListIndex);
    GetDlgItem(IDC_EDIT1)->SetWindowText(str);

    if( 0 <= nListIndex)
    {      
        pMenu = menu.GetSubMenu(0);      
    } 
    else   
    {

    }

    pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, ptInSrceen.x, ptInSrceen.y, this);
}

以上代码是在MFC中右键单击列表控件中的某项时处理事件的函数。

当我右键单击某个项目时出现上下文菜单时,我想在上下文菜单中添加一个事件。

请告诉我们您是如何处理该事件的。
谢谢 :)

使用 InsertMenu and/or AppendMenu 向菜单添加更多项目。

CMenu menu;
menu.LoadMenu(IDR_MENU1);
CMenu* popup = menu.GetSubMenu(0);
popup->InsertMenu(MF_STRING, MF_BYPOSITION, ID_XXX1, "Insert");
popup->AppendMenu(MF_STRING, ID_XXX2, "Append");
popup->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, ptInSrceen.x, ptInSrceen.y, this);

TrackPopupMenu 中的最后一个参数是 window 的句柄,它将接收菜单消息。您只需要处理对话框中的命令:

BEGIN_MESSAGE_MAP(CProcess01Dlg, CDialogEx)
    ON_COMMAND(ID_FILE_NEW, onfilenew)
    ON_COMMAND(ID_XXX1, foo)
    ...
END_MESSAGE_MAP()

CProcess01Dlg::foo()
{
    ...
}