VS2010動態新增選單項
在VC6.0和VS2010裡面動態新增選單項是不一樣的,檢視MSDN文件可知,VS2010採用的是MFC9.0版,其中有很多新增的項具體資訊請檢視http://msdn.microsoft.com/en-us/library/ws8s10w4.aspx,本文就根據自己的測試詳細的比較一下二者的區別:
1.在VC6.0裡面動態新增一個子選單項:
在CMainFrame::OnCtreate()中新增程式碼,另外要在Resource.h裡面新增#define ID_MENU_ADDMENUITEM 32773
CMainFrame::OnCtreate(){
//下面是新增的程式碼
CMenu *pMenu=AfxGetMainWnd()->GetMenu();CMenu *pmSub=pMenu->GetSubMenu(1);
pmSub->AppendMenu(MF_STRING,ID_MENU_ADDMENUITEM,L"Add Menu &Item");
}//效果是在“Edit”選單最下面添加了一個"Add Menu Item"子項
2.在VS2010裡面新增一個子選單項:
要對CMainFrame類的OnShowPopupMenu()進行過載,另外要在Resource.h裡面新增#define IDS_EDIT_MYITEM_1 32773
BOOL CMainFrame::OnShowPopupMenu(CMFCPopupMenu* pMenuPopup)
{
// TODO: Add your specialized code here and/or call the base class
int iIndex = -1;
if (!CMFCToolBar::IsCustomizeMode()&&(iIndex=pMenuPopup->GetMenuBar()->CommandToIndex(ID_EDIT_PASTE))>=0)
{
pMenuPopup->InsertSeparator(iIndex+1);
pMenuPopup->InsertItem(CMFCToolBarMenuButton(IDS_EDIT_MYITEM_1,NULL,-1,_T("&MyItem 1")),iIndex+2);
} //使用CommandToIndex()來獲得選單項的索引,然後根據索引來確定子選單項的新增位置
return CFrameWndEx::OnShowPopupMenu(pMenuPopup);
}//效果是在“Edit”選單最下面添加了一個分割線和一個"MyItem 1"子項
效果如圖,因為還沒有為其新增處理函式,所以呈灰色:
給新增的子選單項新增訊息處理函式:
在MainFrame.h裡面新增訊息處理函式宣告:
class CMainFrame : public CFrameWnd{
//…
protected:
afx_msg void OnEditMyItem1 ();
}
然後在MainFrame.cpp訊息對映裡面新增訊息對映項:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//…
ON_COMMAND(IDS_EDIT_MYITEM_1, OnEditMyItem1)
END_MESSAGE_MAP()
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CMFCMenuBar的繼承關係:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++