无聊的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()是亮点,这样才算加入的是二级菜单

posted @ 2013-01-30 18:35  715776681  阅读(444)  评论(0编辑  收藏  举报