Строка меню, сгенерированная CMFCMenuBar, как использовать CMenu для динамического добавления меню?

#c #mfc

Вопрос:

Этот код не дает желаемого эффекта, я хочу динамически добавлять пользовательское меню в CMFCMenuBar, оно независимо

 CMenu   m_menuFromPlug;

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    AddMenu();
}
    
void CMainFrame::AddMenu()
{
    m_menuFromPlug.CreatePopupMenu();
    CMenu *pMenu = CMenu::FromHandle(m_wndMenuBar.GetDefaultMenu());
    if (NULL != pMenu)
    {
        CString plugMStr = TEXT("Root Menu");
        while (m_menuFromPlug.GetMenuItemCount())
        {
            m_menuFromPlug.DeleteMenu(0, MF_BYPOSITION);
        }

        unsigned int flag = MF_ENABLED | MF_STRING;
        m_menuFromPlug.AppendMenu(flag, 500, TEXT("Item Menu"));

        MENUITEMINFOW menuStru;
        if (pMenu->InsertMenuItem(2, amp;menuStru, MF_BYPOSITION))
        {
            m_wndMenuBar.CreateFromMenu(pMenu->GetSafeHmenu(), TRUE, TRUE);
        }
    }
}
 

Комментарии:

1. Вы передаете неинициализированный экземпляр MENUITEMINFOW в InsertMenuItem — чего вы ожидали? Кроме того, третьим параметром является BOOL, а не флаг MF.

2.CMenu::Вставить элемент.

3. @IInspectable это может быть отменено ON_WM_INITMENUPOPUP ответом.