Проблема с правильным удалением всех элементов подменю в CMFCMenuButton.
Я запутываюсь.
У меня есть меню:
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)
{
// first: Group Name
// second: Group Id
const auto iMenuItemId = iMenuBase + groupInfo.second;
pSubMenu->AppendMenu(MF_STRING, iMenuItemId, groupInfo.first);
}
Они добавляются, и я вижу их в подменю кнопки.
Теперь, если по какой-то причине я запускаю этот код во второй раз, он добавляет новые пункты меню в нижнюю часть существующего подменю в кнопке меню. Почему? я думалRemoveMenu
удалит все существующие пункты подменю.
1 ответ
Мне удалось сделать это так:
const auto menuCount = pSubMenu->GetMenuItemCount();
for (int iMenuItem = 0; iMenuItem < menuCount; iMenuItem++)
{
pSubMenu->DeleteMenu(0, MF_BYPOSITION);
}
Но я до сих пор не понимаю, почему мне пришлось это сделать, потому что я подумал:
pMenu->RemoveMenu(iMenuBase, MF_BYCOMMAND);
... избавится от всех пунктов подменю во всплывающем меню.