无聊的vs2010MFC菜单
动态增加菜单项,在以前是一件比较淡定的问题.但是...
在VS2010中创建MFC单文档应用程序, 默认在MainFrm中有成员变量
CMFCMenuBar m_wndMenuBar;
这是什么BCG的东东,不淡定了,想用以前的GetMenu()和GetSubMenu(),发现都不靠谱,搜索一圈,发现解决方案是注释掉与m_wndMenuBar有关的所有代码.OK了,可以正常使用,只是菜单一些属性也被同时去掉而已.被否决!!!
另一种可以重载OnShowPopupMenu函数,
BOOL CMainFrame::OnShowPopupMenu( CMFCPopupMenu *pMenuPopup )
{
int iIndex = -1;
if ( !CMFCToolBar::IsCustomizeMode() && (iIndex = pMenuPopup->GetMenuBar()->CommandToIndex(ID_TEMP_CUSTOMED)) >= 0 )
{
//使用CommandToIndex()来获得菜单项的索引,然后根据索引来确定子菜单项的添加位置
pMenuPopup->InsertSeparator(iIndex + 1);
CMenu *pNew = new CMenu();
pNew->CreateMenu();
for (int i = 1; i <= iCount; ++i)
{
char buf[10];
itoa(i, buf, 10);
CString name("temp");
name += buf;
int index = IDC_CUSTOMED_BEGIN + i;
pNew->AppendMenu(MF_STRING, index, name);
}
pMenuPopup->InsertItem(CMFCToolBarMenuButton(IDC_CUSTOMED_BEGIN, pNew->GetSafeHmenu(), -1, _T("Delete")));
delete pNew;
}
return CFrameWndEx::OnShowPopupMenu(pMenuPopup);
}
注意: pNew->GetSafeHmenu()是亮点,这样才算加入的是二级菜单