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

时间:2018-02-13 04:17:18

标签: c++ events mfc contextmenu submenu

我正在创建像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中右键单击列表控件中的项目时处理事件的函数。

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

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

1 个答案:

答案 0 :(得分:1)

使用InsertMenu和/或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中的最后一个参数是窗口的句柄,它将接收菜单消息。您只需要处理对话框中的命令:

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

CProcess01Dlg::foo()
{
    ...
}