Проблема с правильным удалением всех элементов подменю в 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);

... избавится от всех пунктов подменю во всплывающем меню.

Другие вопросы по тегам