一直都想已久一下vs2008SP1中MFC的Ribbon功能,終於這個週末把圖形學課第一節的試驗搬到VS2008上來了··
帥氣的Ribbon功能有着強大有誘惑力。這個程序還是比較簡陋的,主要是來測試一下Ribbon的。
上面的工具欄的代碼是在MainFrm.CPP中生成的
主要分成3層結構:
第一層:分類(容器) CMFCRibbonCategory
第二層:面板(容器) CMFCRibbonPanel
第三層:元素 CMFCRibbonBaseElem
如下圖所示元素可以是CMFCRibbonButton,CMFCRibbonGallery,CMFCRibbonGroup類的或者其派生類的對象
下面舉個簡單的例子:
加入主分類
Code
bNameValid = strTemp.LoadString(IDS_RIBBON_HOME);//IDS_RIBBON_HOME爲分類名在String Table中定義
ASSERT(bNameValid);
CMFCRibbonCategory* pCategoryHome = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITESMALL, IDB_WRITELARGE2);
在分類中加入面板
Code
bNameValid = strTemp.LoadString(IDS_RIBBON_CLIPBOARD);
ASSERT(bNameValid);
CMFCRibbonPanel* pPanelClipboard = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon(27));
在面板中加入元素
Code
bNameValid = strTemp.LoadString(IDS_RIBBON_PASTE);
ASSERT(bNameValid);
CMFCRibbonButton* pBtnPaste = new CMFCRibbonButton(ID_EDIT_PASTE, strTemp, 0, 0);
pPanelClipboard->Add(pBtnPaste);
bNameValid = strTemp.LoadString(IDS_RIBBON_CUT);
ASSERT(bNameValid);
pPanelClipboard->Add(new CMFCRibbonButton(ID_EDIT_CUT, strTemp, 1));
bNameValid = strTemp.LoadString(IDS_RIBBON_COPY);
ASSERT(bNameValid);
pPanelClipboard->Add(new CMFCRibbonButton(ID_EDIT_COPY, strTemp, 2));
bNameValid = strTemp.LoadString(IDS_RIBBON_UNDO);
ASSERT(bNameValid);
pPanelClipboard->Add(new CMFCRibbonButton(ID_EDIT_UNDO, strTemp,10));
主要添加就這三個步驟啦
其他的細節方面可以參看我的源代碼:裏面有註釋
http://www.codeplex.com/MFCDRAW2008/Release/ProjectReleases.aspx?ReleaseId=18548