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

标签 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中右键单击列表控件中的某个项目时处理事件的函数。

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

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

最佳答案

使用 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()
{
    ...
}

关于c++ - 当我按下子菜单 MFC 中的项目时如何获取事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48759355/

相关文章:

c++ - 为什么 size_t 和 unsigned int 比 int 慢?

events - 用于附加/分离的 Laravel 模型事件

html5 音频 - canplay 事件不会在 Safari(Mac 桌面)上触发

javascript - 输入字段的更改和模糊事件不会被触发

c++ - 使用 CMFCPropertyGrid 在可停靠 Pane 上捕获失去焦点事件

java - JNI、垃圾收集和指针——Java/C++ 谁应该做什么?

c++ - OpenGL 显示列表 block glEnable(GL_COLOR_MATERIAL)

c++ - 使用 foreach 语法进行迭代时如何检查我是否在最后一个元素上

visual-c++ - 如何在 MFC 应用程序中获取命令行参数?

visual-c++ - SetWindowPos() 函数不移动窗口?