CMenu newMenu;
newMenu.LoadMenu(menuID);
SetMenu(&newMenu);
newMenu
是一个临时对象。一旦函数退出,它将被销毁。结果是未定义的行为。
CMenu* pMenu = GetMenu();
if (pMenu == NULL) return;
pMenu->Detach();
我不确定这段代码会完成什么。请注意,CWnd::SetMenu
将替换旧菜单。它不会破坏旧的菜单句柄,但 MFC 将在最后处理清理(Detach
如果这是目标,则不会破坏句柄)
试试这个代码:
将菜单对象声明为类成员:
class CMainFrame : public CMDIFrameWnd
{
CMenu m_menu1, m_menu2;
...
};
加载一次菜单:
CMainFrame::CMainFrame()
{
m_menu1.LoadMenu(IDR_MENU1);
m_menu2.LoadMenu(IDR_MENU2);
...
}
更改菜单:
void CMainFrame::OnChangeMenu()
{
if(want_menu1)
{
SetMenu(&m_menu1);
}
else if (want_menu2)
{
SetMenu(&m_menu2);
}
}