windows - MFC中如何获取子菜单?

标签 windows winapi mfc

我正在尝试获取一个子菜单,以便我可以在它显示之前对其进行更改。

所以我为我的窗口创建了一个 OnInitMenu() 处理程序。我计划使用 pMenu->GetMenuItemInfo() 来获取子菜单。

但是,这似乎行不通。为了找到我想要的菜单,我必须提供菜单命令 ID(我不认为硬编码项目位置令人满意)。但是打开子菜单的菜单项没有命令 ID。我可以获得该子菜单中存在的菜单命令,但我仍然没有菜单本身。

如何在不依赖 MF_BYPOSITION 的情况下找到嵌套在主菜单中的子菜单?

最佳答案

我对同一问题的解决方案是创建一个辅助函数来搜索菜单并根据菜单名称返回位置。

int CEnviroView::FindMenuItem(CMenu* Menu, LPCTSTR MenuName) {
    int count = Menu->GetMenuItemCount();
    for (int i = 0; i < count; i++) {
        CString str;
        if (Menu->GetMenuString(i, str, MF_BYPOSITION) &&
            str.Compare(MenuName) == 0)
            return i;
    }
    return -1;
}

关于windows - MFC中如何获取子菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10365459/

相关文章:

c++ - 椭圆内部的颜色是什么?

c++ - DirectUI 的事实是什么?

windows - MvvmCross Windows Phone 8.1 绑定(bind)列表选择到命令,编译失败

windows - Windows 应用程序如何使用多个进程?

C++ : Incorrect File Size Calculation WinAPI

c++ - 指向线程的指针

python - 无法从 cryptography.hazmat.bindings._openssl 加载 ffi 库

c - 通过图像名称获取进程的进程句柄

windows - 谁能解释一下FindResource/LoadResource/LockResource?

c++ - MessageBox 不打印 UNICODE 字符