#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.3. @IInspectable это может быть отменено
ON_WM_INITMENUPOPUP
ответом.