我弄糊涂了。
我有菜单:
IDR_MENU_POPUP_MANAGE_GROUPS MENU
BEGIN
POPUP "__MANAGE_GROUP__"
BEGIN
MENUITEM "Add Group", ID_POPUP_ADD_GROUP
POPUP "Edit Group"
BEGIN
MENUITEM "__EDIT__", ID_POPUP_EDIT_GROUP_BASE
END
POPUP "Delete Group"
BEGIN
MENUITEM "__DELETE__", ID_POPUP_DELETE_GROUP_BASE
END
END
END
此由使用
CMFCMenuButton
。在运行时,我动态删除两个子菜单,如下所示:
CMenu* pMenu = m_menuManageGroups.GetSubMenu(0);
CMenu* pSubMenu = nullptr;
pSubMenu = pMenu->GetSubMenu(1);
pMenu->RemoveMenu(ID_POPUP_EDIT_GROUP_BASE, MF_BYCOMMAND);
在第一个例子中,它起作用,而“编辑”子菜单不在我的菜单按钮中。
但随后我将一些菜单项添加到子菜单中:
for (auto& groupInfo : mapGroups)
{
const auto iMenuItemId = iMenuBase + groupInfo.second;
pSubMenu->AppendMenu(MF_STRING, iMenuItemId, groupInfo.first);
}
它们被添加,我在按钮的子菜单中看到它们。
现在,如果出于某种原因,我第二次运行此代码,它最终会将新的菜单项添加到菜单按钮中现有子菜单的底部。为什么?我想
RemoveMenu
将删除所有现有的子菜单项。