圖形畫板2008設計文檔
目錄
4.4.1. 創建主類別(CMFCRibbonCategory) 12
4.4.2. 創建面板(CMFCRibbonPanel) 12
4.4.3. 添加按鈕(CMFCRibbonButton)到面板 12
圖形後臺框架
基本圖形類框架如下:
界面框架
主用應用了Visual Studio 2008 SP1添加的新增強包,可以方面的創建出像OFFCIE2007的Ribbon界面。
Ribbon工具欄是在MainFrm.CPP中的void CMainFrame::InitializeRibbon()生成的
整個工具欄CMFCRibbonBar分爲
快捷菜單
主菜單
主菜單按鈕CMFCRibbonApplicationButton
主菜單CMFCRibbonMainPanel
工具欄
主要分成3層結構:
第一層:分類(容器) CMFCRibbonCategory,如圖中紅色部分所示。
第二層:面板(容器) CMFCRibbonPanel ,如圖中紅色部分所示。
第三層:元素 CMFCRibbonBaseElem,如圖中紅色部分所示。
先有一個整體的概念~
如何創建OFFICE風格的MFC工程
以下是創建Visual C++ 2008 SP1創建Office風格的MFC的步驟:
首先,新建項目,選擇Visual C++ 中的MFC應用程序,輸入名稱,點擊確定
接着選擇Office的項目類型,MFC的使用選擇"在靜態庫中使用MFC"(這樣可以保證在任何Windows系統中都能正確運行,如果選擇共享DLL,則只能在有MFC7.0庫的機子上正確運行,所以推薦選"在靜態庫中使用MFC")
接下來的幾個步驟都直接按默認即可
這裏我們先將"導航窗格"的勾去掉(由於本程序沒有用到它,所以再此不詳細介紹)
這裏將視圖類的基類選爲CScrollView,點擊完成
然後運行一下,基本的雛形就出來啦,簡單吧~
如何在工具欄上面添加按鈕
添加菜單主項
接着繼續添加菜單子項,並在屬性欄中設置相應的屬性,注意Prompt要按照"解釋/n標題"這種格式,例如:Prompt繪製一個圓/n畫圓
做完要記得保存哦
爲菜單項添加事件
右鍵點擊需要添加事件的選項,選擇添加"事件處理程序"
點擊"添加編輯",然後就到視圖類的結尾找到這個事件的函數,開始編寫事件,可以注意到"函數處理程序名稱"是根據"命令名"自動生成的,雖然自己也可以修改,不過還是按默認的比較好,所以也說明上面提到的加入ID時候要根據這樣的命名規則來命名。
添加Ribbon字符
如下圖所示在String Table中添加所有需要放到工具欄中按鈕的ID及其標題,別忘了保存哦
將按鈕添加到工具欄
通過上面的準備,接下來,我們可以通過類視圖定位到Ribbon初始化的位置
然後按照上1.2.3章節介紹的層次,來將按鈕添加到菜單欄
創建主類別(CMFCRibbonCategory)
// 爲"剪貼板"面板添加"主"類別:
bNameValid = strTemp.LoadString(IDS_RIBBON_HOME);//添加"主頁"分類面板
ASSERT(bNameValid);
CMFCRibbonCategory* pCategoryHome = m_wndRibbonBar.AddCategory(strTemp, IDB_WRITESMALL, IDB_WRITELARGE2);//創建分類頁
bNameValid = strTemp.LoadString(IDS_RIBBON_DIY);添加"自定義基本圖形"主分類面板,應現在String Table中添加IDS_RIBBON_DIY及其標題
ASSERT(bNameValid);
CMFCRibbonCategory* pCategoryDIY = m_wndRibbonBar.AddCategory(strTemp,IDB_WRITESMALL,IDB_WRITELARGE2);//創建分類IDB_WRITESMALL是小圖標,IDB_WRITELARGE2是大圖標,它們都是在資源裏面創建的
創建面板(CMFCRibbonPanel)
//創建"繪圖"面板
bNameValid = strTemp.LoadString(IDS_RIBBON_SHAPE);
ASSERT(bNameValid);
CMFCRibbonPanel* pPanelDraw = pCategoryHome->AddPanel(strTemp, m_PanelImages.ExtractIcon (7));
添加按鈕(CMFCRibbonButton)到面板
//添加VC直線按鈕到"繪圖"面板
bNameValid=strTemp.LoadString(IDS_RIBBON_VCLINE);
ASSERT(bNameValid);
pPanelDraw->Add(new CMFCRibbonButton(ID_DRAW_VCLINE,strTemp,11,2));
//添加BEZIER曲線按鈕到"繪圖"面板
bNameValid=strTemp.LoadString(IDS_RIBBON_BEZIER);
ASSERT(bNameValid);
pPanelDraw->Add(new CMFCRibbonButton(ID_DRAW_BEZIER,strTemp,12,3));
//添加矩形按鈕到"繪圖"面板
bNameValid=strTemp.LoadString(IDS_RIBBON_RECTANGEL);
ASSERT(bNameValid);
pPanelDraw->Add(new CMFCRibbonButton(ID_DRAW_RECTANGLE,strTemp,13,4));
//添加VC圓按鈕到"繪圖"面板
bNameValid=strTemp.LoadString(IDS_RIBBON_VCCIRCLE);
ASSERT(bNameValid);
pPanelDraw->Add(new CMFCRibbonButton(ID_DRAW_VCCIRCLE,strTemp,14,5));
//添加VC橢圓按鈕到"繪圖"面板
bNameValid=strTemp.LoadString(IDS_RIBBON_VCELLIPSE);
ASSERT(bNameValid);
pPanelDraw->Add(new CMFCRibbonButton(ID_DRAW_VCELLIPSE,strTemp,15,6));
//添加多邊形按鈕到"繪圖"面板
bNameValid=strTemp.LoadString(IDS_RIBBON_POLYGON);
ASSERT(bNameValid);
pPanelDraw->Add(new CMFCRibbonButton(ID_DRAW_POLYGON,strTemp,16,7));
//添加畫筆對話框按鈕到"繪圖"面板
bNameValid=strTemp.LoadString(IDS_RIBBON_PENDIALOG);
ASSERT(bNameValid);
pPanelDraw->Add(new CMFCRibbonButton(ID_OPTIONS_PEN,strTemp));
//添加線顏色按鈕到"繪圖"面板
bNameValid=strTemp.LoadString(IDS_RIBBON_COLOR);
ASSERT(bNameValid);
pPanelDraw->Add(new CMFCRibbonButton(ID_OPTIONS_COLOR,strTemp));
//添加填充色按鈕到"繪圖"面板
bNameValid=strTemp.LoadString(IDS_RIBBON_HATCHCOLOR);
ASSERT(bNameValid);
pPanelDraw->Add(new CMFCRibbonButton(ID_OPTIONS_FILLCOLOR,strTemp));
這樣,按鈕就添加到工具欄中了,具體可以查看源代碼