Visual Studio 2008 SP1 MFC新增功效包編程簡(jiǎn)介_(kāi)第1頁(yè)
Visual Studio 2008 SP1 MFC新增功效包編程簡(jiǎn)介_(kāi)第2頁(yè)
Visual Studio 2008 SP1 MFC新增功效包編程簡(jiǎn)介_(kāi)第3頁(yè)
Visual Studio 2008 SP1 MFC新增功效包編程簡(jiǎn)介_(kāi)第4頁(yè)
Visual Studio 2008 SP1 MFC新增功效包編程簡(jiǎn)介_(kāi)第5頁(yè)
已閱讀5頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第13章 MFC功能包編程簡(jiǎn)介VS08 SP1所含的VC08的MFC功能包MFC Feature Pack for Visual C+ 2021,在MFC 9.0的根底上增加137個(gè)新類(lèi)及86個(gè)內(nèi)部類(lèi)和1個(gè)新結(jié)構(gòu)。功能包對(duì)傳統(tǒng)MFC庫(kù)進(jìn)行了擴(kuò)展,以支持時(shí)髦的現(xiàn)代用戶(hù)界面元素,如Office Fluent流暢UI、停靠窗口和MDI選項(xiàng)卡tab窗口似Visual Studio 2005/2021、增強(qiáng)型工具條、豐富的新控件集、支持總體視覺(jué)樣式overall visual style、支持桌面報(bào)警desktop alerts等等。程序員可以利用該功能包編寫(xiě)具有類(lèi)似于微軟公司新版的Microsoft

2、Office、Visual Studio或Internet Explorer等流行界面視覺(jué)樣式的應(yīng)用程序。MFC功能包的改良主要表達(dá)在新型用戶(hù)界面上,主要包括:功能區(qū)ribbon、選項(xiàng)卡tab窗口和窗格pane、視覺(jué)樣式切換換膚、可停靠與自動(dòng)隱藏的控制條和窗格等。MFC功能包的幫助信息,位于MSDN的“目錄開(kāi)發(fā)工具和語(yǔ)言Visual Studio文檔Visual C+參考信息Libraries ReferenceMFC Feature Pack for Visual C+ 2008”,主要內(nèi)容在其“ReferenceClasses子目錄中。在VS2021中,MFC功能包已被完全并入MFC,所以

3、其幫助系統(tǒng)也被并入標(biāo)準(zhǔn)的MFC幫助系統(tǒng)之中,位于MSDN的“目錄開(kāi)發(fā)工具和語(yǔ)言Visual Studio文檔Visual C+參考信息Libraries ReferenceMFC,主要內(nèi)容也在其“Classes子目錄中。13.1 新增功能MFC功能包在用戶(hù)界面方面增加了許多新功能,包括對(duì)傳統(tǒng)界面元素的改良和假設(shè)干新增的界面元素。13.1.1 傳統(tǒng)界面元素的改良MFC功能包,對(duì)菜單、工具條、對(duì)話框和控件等傳統(tǒng)界面元素,進(jìn)行了大量改良,以適應(yīng)時(shí)髦用戶(hù)界面的需要。1菜單在功能包中增了微軟Office新樣式的菜單和菜單條,可以??亢陀米岳L圖片定制,支持菜單陰影和滾動(dòng)、菜單工具提示、運(yùn)行時(shí)的菜單字體修改

4、、菜單標(biāo)識(shí)的自繪、最近使用列表和窗口列表、右對(duì)齊的組合框、可去掉的菜單tear-off menus等,還支持菜單動(dòng)畫(huà),包括圖片淡入和漸顯、展開(kāi)或滑進(jìn)視圖等。2工具條功能包中的新型工具條,支持大圖標(biāo)和雙臂章式double-chevron按鈕存在比當(dāng)前可見(jiàn)局部更多的按鈕,而且按鈕的圖片可在鼠標(biāo)懸浮于按鈕上時(shí)更換,并允許在圖片下顯示文本,還可以在菜單和工具提示中自動(dòng)創(chuàng)立鍵盤(pán)快捷鍵。在新型工具條中,可包含鋼筋Rebar子窗口容器、標(biāo)準(zhǔn)的組合框和文本框按鈕、標(biāo)準(zhǔn)字體組合框和字體大小組合框按鈕、標(biāo)準(zhǔn)顏色選擇器控件,以及包含釘銷(xiāo)鈕的下拉式可移去窗格,還支持MS Office視覺(jué)樣式visual styles

5、和具有背景圖的透明工具條。不可定制的工具條。3控件功能包中新增和改良的控件有:URL鏈接鈕、裝飾有位圖圖片的按鈕、菜單鈕、可編輯列表、顏色選擇器控件、殼Shell樹(shù)控件、殼列表控件、屏蔽的Masked編輯控件、定制的Custom工具提示控件、包含瀏覽鈕的編輯控件、屬性格Property grid、MDI選項(xiàng)卡tab控件、支持諸如三維、Excel、OneNote等視覺(jué)樣式的選項(xiàng)卡控件。4對(duì)話框功能包中新增和改良的對(duì)話框有:Windows管理器對(duì)話框、Office樣式的顏色選擇對(duì)話框、圖片編輯器對(duì)話框、包含假設(shè)干控件諸如快捷條、樹(shù)控件或Office 2007樣式列表等的屬性單property sh

6、eets。13.1.2 新界面元素MFC功能包新增加的界面元素主要有窗格、功能區(qū)和選項(xiàng)卡。1窗格窗格Panes是一種窗口,通常是可調(diào)整大小、可移去和可??康摹4案裰С秩缦鹿δ埽篗S Office樣式的對(duì)話框條、支持圖片和停靠的Office樣式的菜單條,MS Outlook樣式的快捷條shortcut bar、標(biāo)題條caption bar和任務(wù)窗格task pane,類(lèi)似于工具條、屬性和瀏覽器窗格Visual Studio樣式的窗格。窗格還支持內(nèi)容和位置在應(yīng)用程序的屢次運(yùn)行之間持續(xù)不變的鋼筋Rebar控件、支持圖標(biāo)、動(dòng)畫(huà)和進(jìn)度條狀態(tài)條和打印預(yù)覽效勞。2功能區(qū)控件功能區(qū)ribbon,緞絲帶/帶狀條

7、是新的Microsoft Office Fluent用戶(hù)界面的一局部,用來(lái)代替?zhèn)鹘y(tǒng)的菜單和工具條功能。在面板設(shè)計(jì)器中,功能區(qū)包含一些用于創(chuàng)立、編輯和導(dǎo)出面板及其元素的上下文工具。功能區(qū)控件支持:通用功能區(qū)特性features、Vista Aero集成默認(rèn)樣式為氣體主題theme、功能區(qū)窗格、功能區(qū)上下文的類(lèi)別categories選項(xiàng)卡標(biāo)簽、功能區(qū)元素、功能區(qū)鍵提示keytips、功能區(qū)調(diào)色板圖表種類(lèi)galleries、功能區(qū)用戶(hù)化定制、功能區(qū)最小工具條、功能區(qū)啟動(dòng)Launch按鈕和主按鈕、功能區(qū)狀態(tài)條等。3選項(xiàng)卡窗口在MFC功能包的MDI應(yīng)用程序中,不再使用傳統(tǒng)的多個(gè)獨(dú)立子窗口作為文檔窗口,而

8、是使用位于主框架窗口客戶(hù)區(qū)的MDI選項(xiàng)卡窗口tabbed window組,簡(jiǎn)稱(chēng)為選項(xiàng)卡組tabbed groups。選項(xiàng)卡窗口可被垂直或水平排列,如果一個(gè)應(yīng)用程序具有多個(gè)MDI選項(xiàng)卡組,那么各組之間用分隔條splitter分開(kāi)。MDI選項(xiàng)卡組具有如下特點(diǎn):應(yīng)用程序可動(dòng)態(tài)創(chuàng)立選項(xiàng)卡窗口、應(yīng)用程序可垂直或水平排列選項(xiàng)卡窗口、選項(xiàng)卡窗口組被分隔條分開(kāi)、用戶(hù)可使用分隔條來(lái)調(diào)整選項(xiàng)卡組的大小、用戶(hù)可在組間拖動(dòng)單個(gè)選項(xiàng)卡、用戶(hù)可拖動(dòng)單個(gè)選項(xiàng)卡來(lái)創(chuàng)立組、用戶(hù)可使用快捷菜單來(lái)移動(dòng)選項(xiàng)卡或創(chuàng)立新組、應(yīng)用程序可以保存和裝入選項(xiàng)卡窗口的布局和MDI文檔列表、應(yīng)用程序還可以訪問(wèn)單個(gè)選項(xiàng)卡組并修改它們的參數(shù)。 新增功能

9、MFC功能包新增加的其他功能有Outlook式的桌面報(bào)警、控件的定制、可視化管理和假設(shè)干特殊的功能和操作。1桌面報(bào)警微軟的Outlook式桌面報(bào)警Desktop Alert,顯示一個(gè)包含通知的彈出窗口,如Outlook收件箱中的通知郵件到達(dá)消息的窗口。 2定制用戶(hù)可自定義控件的顏色、圖片和文本等,包括:位于工具條和菜單之間的拖拉鈕drag button、使用簡(jiǎn)單的位圖編輯器來(lái)編輯用戶(hù)定義的圖片、在運(yùn)行時(shí)創(chuàng)立自定義的工具條、定制上下文菜單、使用工具條定制菜單來(lái)快速定制工具條按鈕、使用菜單資源來(lái)自動(dòng)創(chuàng)立用戶(hù)化類(lèi)別customization categories、利用按下Alt鍵并拖曳工具條按鈕來(lái)定

10、制工具條、定制鼠標(biāo)事件處理、定制快捷鍵、保存和恢復(fù)工具條與菜單的狀態(tài)到注冊(cè)表、訪問(wèn)工作區(qū)workspace管理器以保持定制的設(shè)置到注冊(cè)表、調(diào)用自定義工具等。3可視化MFC提供了可視化visualization管理器,它按照用戶(hù)選擇的視覺(jué)樣式來(lái)繪制控件??梢暬С諱icrosoft Office 2000/XP/2003/2007視覺(jué)樣式和視覺(jué)樣式。4特殊功能MFC支持如下操作:自動(dòng)隱藏窗口、保存和裝入已翻開(kāi)文檔的狀態(tài)、將假設(shè)干窗格??康礁?dòng)的袖珍mini框架窗口、混合圖片支持32位圖片、按從右到左RTL = Right-To-Left的格式顯示全球化文本、允許可達(dá)性accessibility支

11、持。MFC還支持運(yùn)行時(shí)改變窗口的??款?lèi)型:標(biāo)準(zhǔn)在拖動(dòng)窗口期間不畫(huà)窗口的內(nèi)容如Microsoft Visual Studio .NET 2003。立即在拖動(dòng)窗口期間畫(huà)窗口的內(nèi)容如Microsoft Visio。靈巧Smart在拖動(dòng)窗口期間畫(huà)窗口的內(nèi)容而且有一箭頭標(biāo)記指出窗口可停靠的位置如Microsoft Visual Studio 2005/2021。13.2 界面的切換與定制與傳統(tǒng)的MFC應(yīng)用程序不同,功能包應(yīng)用程序可以在運(yùn)行時(shí)由用戶(hù)來(lái)動(dòng)態(tài)切換界面風(fēng)格和定制菜單與工具條等界面元素。下面我們通過(guò)一個(gè)簡(jiǎn)單的例子,展示一下MFC功能包應(yīng)用程序界面的視覺(jué)樣式及主題的切換效果和強(qiáng)大的用戶(hù)自定義功能。

12、視覺(jué)樣式切換創(chuàng)立一個(gè)單文檔界面的MFC應(yīng)用程序FP1:在“MFC應(yīng)用程序向?qū)?duì)話框的“應(yīng)用程序類(lèi)型頁(yè)參見(jiàn)圖13-1,選中“應(yīng)用程序類(lèi)型欄的“單個(gè)文檔單項(xiàng)選擇項(xiàng)、選中“工程類(lèi)型欄的“MFC標(biāo)準(zhǔn)單項(xiàng)選擇項(xiàng),其它保持不變?nèi)纭耙曈X(jué)樣式和顏色欄的下拉式列表中為“Visual Studio 2005”選項(xiàng)、“啟用視覺(jué)樣式切換復(fù)選框是選中的,按“完成鈕生成FP1工程。直接編譯運(yùn)行的結(jié)果如圖13-2所示。圖13-1 在MFC應(yīng)用程序向?qū)е袉⒂靡曈X(jué)樣式切換圖13-2 Visual Studio 2005視覺(jué)樣式在應(yīng)用程序的“視圖菜單中有一個(gè)“應(yīng)用程序外觀子菜單,其中包含如下菜單項(xiàng):Windows 2000、Of

13、fice XP、Windows XP、Office 2003、Visual Studio.NET 2005默認(rèn)值、Office 2007藍(lán)色樣式、黑色樣式、銀色樣式、水綠色樣式,參見(jiàn)圖13-3。圖13-3 應(yīng)用程序外觀菜單默認(rèn)的視覺(jué)樣式為我們?cè)谠凇癕FC應(yīng)用程序向?qū)?duì)話框的“應(yīng)用程序類(lèi)型頁(yè)“視覺(jué)樣式和顏色欄的下拉式列表中所選中的選項(xiàng)Visual Studio 2005。圖13-4是假設(shè)干其它視覺(jué)樣式的效果圖: Windows XPOffice 2003 Office 2007的藍(lán)色樣式 Office 2007的黑色樣式圖13-4 局部視覺(jué)樣式13 自定義設(shè)置在程序的“視圖菜單的“工具欄和??看?/p>

14、口子菜單中,還有一個(gè)“自定義菜單項(xiàng),利用其彈出的對(duì)話框,用戶(hù)可以在程序運(yùn)行時(shí)進(jìn)行許多自定義設(shè)置似MS Word 2003,圖13-5是“自定義對(duì)話框的假設(shè)干設(shè)置頁(yè)。 “命令頁(yè)“工具欄頁(yè) “鍵盤(pán)頁(yè)“菜單頁(yè)“選項(xiàng)頁(yè)圖13-5 “自定義對(duì)話框的假設(shè)干設(shè)置頁(yè)1增刪工具欄按鈕可以按工具欄右端的工具欄選項(xiàng)鈕,利用彈出的“添加或刪除按鈕子菜單中的“標(biāo)準(zhǔn)子菜單,來(lái)增/刪顯示/隱藏標(biāo)準(zhǔn)工具欄中的按鈕,參見(jiàn)圖13-6。圖13-6 “添加或刪除按鈕菜單中的“標(biāo)準(zhǔn)子菜單利用工具欄選項(xiàng)的“添加或刪除按鈕子菜單中的“自定義菜單項(xiàng)或利用程序“視圖菜單的“工具欄和??看翱谧硬藛沃械摹白远x菜單項(xiàng)彈出的“自定義對(duì)話框的“命令頁(yè)

15、,還可以使用各菜單中的菜單項(xiàng)來(lái)可視化地交互增刪、分組、調(diào)位工具欄上的按鈕或菜單項(xiàng)似MS Office和MS Visual Studio。2新建工具欄利用“自定義對(duì)話框的“工具欄頁(yè)參見(jiàn)圖13-7,可以在運(yùn)行時(shí)為應(yīng)用程序動(dòng)態(tài)創(chuàng)立新的工具欄,并在其中增加假設(shè)干菜單項(xiàng)或按鈕。具體的做法是:圖13-7 “自定義對(duì)話框的“工具欄頁(yè)在對(duì)話框中按“新建鈕,在彈出的“工具欄名稱(chēng)對(duì)話框中輸入新工具欄的名稱(chēng),如“編輯,按“確定關(guān)閉此對(duì)話框,參見(jiàn)圖13-8。圖13-8 “工具欄名稱(chēng)對(duì)話框利用“自定義對(duì)話框的“命令頁(yè),向出現(xiàn)的浮動(dòng)空工具欄中添加假設(shè)干菜單項(xiàng)按鈕,如“編輯菜單中的“剪切、“復(fù)制和“粘貼菜單項(xiàng)按鈕:??梢詫?/p>

16、新加的工具欄??康阶约合矚g的位置,如標(biāo)準(zhǔn)工具欄之下,參見(jiàn)圖13-9。圖13-9 ??啃鹿ぞ邫诘綐?biāo)準(zhǔn)工具欄下3設(shè)置快捷鍵利用“自定義對(duì)話框的“鍵盤(pán)頁(yè),可以在運(yùn)行時(shí)為應(yīng)用程序動(dòng)態(tài)添加菜單項(xiàng)對(duì)應(yīng)的快捷鍵。具體做法是,在對(duì)話框中左上部的“類(lèi)別欄的下拉式列表中選擇一菜單如“文件,在其下的“命令欄的列表中選擇一菜單項(xiàng)如“打印預(yù)覽,定位于對(duì)話框中下部的“按新快捷鍵欄下的文本編輯框,按快捷鍵組合鍵如Ctrl+R,再按對(duì)話框的“分配鈕完成操作,參見(jiàn)圖13-10。圖13-10 利用“自定義對(duì)話框的“鍵盤(pán)頁(yè)設(shè)置快捷鍵如果你選擇的組合鍵已經(jīng)被分配給了本程序的其它菜單項(xiàng)此時(shí)在該文本編輯框下面的“已分配給:之下,會(huì)顯示此

17、組合鍵所原來(lái)所對(duì)應(yīng)的菜單項(xiàng)名串,那么“分配鈕是灰色不可用的。另外,按對(duì)話框的“刪除鈕,可以刪除當(dāng)前菜單項(xiàng)的已有快捷鍵。按對(duì)話框的“全部重置鈕,可以恢復(fù)初始的快捷鍵設(shè)置你在程序運(yùn)行后所作的快捷鍵設(shè)置將全部作廢。4切換菜單利用“自定義對(duì)話框的“菜單頁(yè)左邊的“應(yīng)用程序框架菜單欄的“顯示菜單下拉式列表,可以在框架窗口的多個(gè)菜單中進(jìn)行強(qiáng)制切換,參見(jiàn)圖13-11。圖13-11 利用“自定義對(duì)話框的“菜單頁(yè)切換菜單例如,對(duì)多文檔界面的應(yīng)用程序,可以在未翻開(kāi)子窗口時(shí)的含3個(gè)下拉菜單的“默認(rèn)菜單和翻開(kāi)子窗口后的含5個(gè)下拉菜單的與應(yīng)用程序工程同名的菜單之間進(jìn)行強(qiáng)制切換。5編輯上下文菜單利用“自定義對(duì)話框的“菜單頁(yè)

18、右邊的“上下文菜單欄的“選擇上下文菜單下拉式列表,可以在選擇已有的上下文菜單如“編輯后,再切換到“命令頁(yè),然后就可以通過(guò)鼠標(biāo)交互式可視操作來(lái)編輯該上下文菜單,包括增加、刪除、移位、分組菜單項(xiàng)等。參見(jiàn)下列圖13-12。a) 初始的“編輯上下文菜單b) 將文件菜單中的翻開(kāi)等菜單項(xiàng)拖進(jìn)“編輯上下文菜單圖13-12 利用“自定義對(duì)話框的“菜單頁(yè)編輯上下文菜單6工具欄和菜單項(xiàng)選擇項(xiàng)利用“自定義對(duì)話框的“選項(xiàng)頁(yè)參見(jiàn)圖13-13上部的“工具欄,可以選擇是否“在工具欄上顯示屏幕提示即鼠標(biāo)懸浮時(shí)的tip,以及是否“在屏幕提示中顯示快捷鍵,它們的區(qū)別如:或。還可以在“選項(xiàng)頁(yè)中選擇工具欄是否使用“大圖標(biāo)參見(jiàn)圖13-

19、13。圖13-13 “自定義對(duì)話框的“選項(xiàng)頁(yè)與設(shè)置工具條上的圖標(biāo)大小利用 “選項(xiàng)頁(yè)下部的“個(gè)性化菜單和工具欄,選擇是否“菜單首先顯示最近使用的命令,以及是否在“短暫延遲后顯示完整菜單,參見(jiàn)圖13-14。 (a) 首先顯示最近使用的菜單項(xiàng) (b) 短暫延遲后顯示完整菜單 (c) 直接顯示完整菜單圖13-14 是否顯示完整菜單 窗口框架MFC功能包引入了全新的窗口框架,支持窗口??俊⒖刂茥l窗格、??空緱l、窗格容器、窗格分隔條、自動(dòng)隱藏控制條、選項(xiàng)卡控制條和Outlook控制條等。.1 窗口??縈FC功能包引入了類(lèi)似于Visual Studio界面的窗口??縟ocking功能。應(yīng)用程序的主框架窗口通

20、常由CFrameWndEx或CMDIFrameWndEx類(lèi)表示,主框架也被稱(chēng)為??空綿ock site。.2 控制條窗格在MFC功能包中,控制條被稱(chēng)為窗格pane,是從CBasePane類(lèi)派生的。而傳統(tǒng)控制條基類(lèi)為CControlBar,參見(jiàn)圖13-15其中帶星號(hào)的為功能包新增類(lèi)。圖13-15 控制條窗格類(lèi)窗格的父窗口可為以下三種類(lèi)型之一:??空?、??織l、或袖珍框架窗口,參見(jiàn)圖13-16。圖13-16 MFC功能包創(chuàng)立的應(yīng)用程序有兩類(lèi)窗格:大小不可調(diào)的及大小可調(diào)的。大小可調(diào)的窗格如狀態(tài)條和工具條可以使用分隔條splitter或滑條slider來(lái)調(diào)整大小。大小可調(diào)的窗格可構(gòu)成容器,即一個(gè)窗格中可

21、??考僭O(shè)干其他窗格,在它們之間用分隔條分開(kāi)。但是,大小可調(diào)的窗格不能被粘接??康酵?織l。大小不可調(diào)的窗格從CPane類(lèi)派生,而大小可調(diào)的窗格那么從CDockablePane類(lèi)派生。.3 ??空驹趹?yīng)用程序中,??空綿ock site即主框架窗口擁有所有的窗格和袖珍框架窗口。??空景粋€(gè)CDockingManager成員,該成員維護(hù)著屬于此??空镜乃写案竦囊粋€(gè)列表。該列表是排好序的,使得在外部邊界上創(chuàng)立的窗格,被放在列表的開(kāi)始處。在架構(gòu)framework重繪停靠站時(shí),它會(huì)遍歷該列表,調(diào)整其中每個(gè)窗格的布局,以放入停靠站的當(dāng)前矩形范圍中。在你需要調(diào)整??坎季謺r(shí),可以調(diào)用AdjustDocking

22、Layout或RecalcLayout函數(shù),架構(gòu)會(huì)重定向這一調(diào)用到??抗芾砥?。.4 ??織l每個(gè)主框架窗口都可以沿其邊框放置停靠條。??織ldock bar是一個(gè)屬于CDockSite類(lèi)的窗格。??織l可以接受派生于CPane的對(duì)象,如工具條。在主框架窗口初始化時(shí),調(diào)用CBasePane類(lèi)的EnableDocking函數(shù)來(lái)創(chuàng)立停靠條、調(diào)用CDockablePane類(lèi)的EnableAutoHideBars函數(shù)來(lái)激活自動(dòng)隱藏條。EnableAutoHideBars創(chuàng)立CAutoHideDockSite對(duì)象,并放置它們緊鄰每個(gè)??織l。每個(gè)??織l被分成假設(shè)干??啃衐ock row,??啃杏蒀DockingP

23、anesRow類(lèi)表示。每個(gè)??啃邪粋€(gè)工具條列表。如果用戶(hù)??恳粋€(gè)工具條或?qū)⒐ぞ邨l從一個(gè)??啃幸苿?dòng)到同一停靠條的另一個(gè)??啃袝r(shí),架構(gòu)會(huì)或者創(chuàng)立一個(gè)新的停靠行并相應(yīng)地調(diào)整??織l的大小;或者放置該工具條到一個(gè)已存在的??啃猩?。.5 袖珍框架窗口袖珍框架窗口mini-frame window是一種位于迷你型框架窗口中的浮動(dòng)窗格。它由只能包含唯一一個(gè)窗格的CMDITabInfo類(lèi)和可以包含幾個(gè)窗格的CMultiPaneFrameWnd類(lèi)來(lái)表示。你可以在代碼中,通過(guò)調(diào)用CBasePane:FloatPane函數(shù)來(lái)浮動(dòng)窗格。當(dāng)窗格浮動(dòng)后,架構(gòu)會(huì)自動(dòng)創(chuàng)立一個(gè)袖珍框架窗口,而且該袖珍框架窗口成為浮動(dòng)窗格的父

24、窗口。在浮動(dòng)的窗格??繒r(shí),架構(gòu)會(huì)重置其父窗口,而且浮動(dòng)窗格變成一個(gè)停靠條對(duì)工具條或一個(gè)??空緦?duì)大小可改變的窗格。.6 窗格分隔條窗格分隔器pane divider也叫滑條slider或分隔條splitters,由CPaneDivider類(lèi)表示。在用戶(hù)??看案駮r(shí),架構(gòu)會(huì)創(chuàng)立窗格分隔條,不管該窗格是??吭谕?空具€是另一個(gè)窗格之中。當(dāng)窗格??康酵?空緯r(shí),窗格分隔條會(huì)調(diào)用默認(rèn)的窗格分隔條。默認(rèn)窗格分隔條,負(fù)責(zé)所有??窟M(jìn)??空镜拇案竦呐帕胁季帧M?抗芾砥骶S護(hù)著一個(gè)默認(rèn)窗格分隔條的列表和一個(gè)窗格的列表。??抗芾砥髫?fù)責(zé)所有??看案竦呐帕胁季?。.7 窗格容器所有大小可變的窗格,在相互停靠時(shí),都被維護(hù)在由CPa

25、neContainer類(lèi)表示的容器container中。每個(gè)容器都具有假設(shè)干指針,分別指向左窗格、右窗格、左子容器、右子容器、和左右局部之間的分隔條,其中的左和右不是指物理上的邊側(cè),而是標(biāo)識(shí)樹(shù)結(jié)構(gòu)的分支。用這種方式,我們可以建造一棵窗格和分隔條的樹(shù),從而可達(dá)成復(fù)雜的窗格布局,改變窗格大小以使它們合在一起。CPaneContainer類(lèi)維護(hù)容器樹(shù),它也維護(hù)位于此樹(shù)中的兩個(gè)窗格和分隔條列表。窗格容器管理器,通常被植入帶有多個(gè)窗格的默認(rèn)滑條和袖珍框架窗口之中。.8 自動(dòng)隱藏控制條在默認(rèn)情況下,每個(gè)CDockablePane都支持自動(dòng)隱藏特性auto-hide feature。當(dāng)用戶(hù)單擊CDockab

26、lePane標(biāo)題上的釘栓pin鈕時(shí),架構(gòu)會(huì)切換窗格到自動(dòng)隱藏模式。為了處理單擊,架構(gòu)會(huì)創(chuàng)立一個(gè)CMFCAutoHideBar類(lèi)和一個(gè)CMFCAutoHideButton類(lèi)以及CMFCAutoHideBar對(duì)象。架構(gòu)將新的CMFCAutoHideBar放到CAutoHideDockSite中。架構(gòu)還將CMFCAutoHideButton附加到工具條。CDockingManager類(lèi)維護(hù)CDockablePane。.9 選項(xiàng)卡控制條與Outlook條CMFCBaseTabCtrl類(lèi),實(shí)現(xiàn)具有可分標(biāo)簽tab選項(xiàng)卡tabbed窗口的根本功能。為了使用CMFCBaseTabCtrl對(duì)象,需在你的應(yīng)用程序

27、中初始化CBaseTabbedPane類(lèi)。CBaseTabbedPane派生于CDockablePane,維護(hù)著一個(gè)指向CMFCBaseTabCtrl對(duì)象的指針。CBaseTabbedPane使用戶(hù)能夠停靠和調(diào)整選項(xiàng)卡控制條tabbed control bar的大小。可使用CDockablePane:AttachToTabWnd函數(shù),來(lái)動(dòng)態(tài)創(chuàng)立被??亢蜆?biāo)注tabbed的控制條。Outlook景色條bar控件也是基于選項(xiàng)卡條的,對(duì)應(yīng)的類(lèi)CMFCOutlookBar也派生于CBaseTabbedPane。Outlook條是一種選項(xiàng)卡窗格tabbed pane,具有Microsoft Outlook

28、 2000 或Outlook 2003中的導(dǎo)航窗格Navigation Pane的可視外觀。CMFCOutlookBar對(duì)象包含一個(gè)CMFCOutlookBarTabCtrl類(lèi)的對(duì)象和一系列選項(xiàng)卡。選項(xiàng)卡tab可以是一個(gè)CMFCOutlookBarPane類(lèi)對(duì)象,或是一個(gè)CWnd派生類(lèi)的對(duì)象。對(duì)用戶(hù)來(lái)說(shuō),Outlook條表現(xiàn)為一系列按鈕和一個(gè)顯示區(qū)域,當(dāng)用戶(hù)單擊一個(gè)按鈕時(shí),對(duì)應(yīng)的控件或窗格就被顯示出來(lái)。 應(yīng)用程序架構(gòu)MFC功能包增加了與傳統(tǒng)的應(yīng)用程序框架基類(lèi)相對(duì)應(yīng)的擴(kuò)展類(lèi),我們可以利用這些類(lèi)的手工編碼來(lái)創(chuàng)立多種具有功能包新界面的MFC應(yīng)用程序。.1 類(lèi)層次結(jié)構(gòu)傳統(tǒng)的MFC應(yīng)用程序的架構(gòu)類(lèi)參見(jiàn)圖

29、13-17下部,都是從MFC類(lèi)庫(kù)中的對(duì)應(yīng)基類(lèi)參見(jiàn)圖13-17上部派生的,可參見(jiàn)12.2節(jié)。為了能支持新圖形用戶(hù)界面,VC08的MFC功能包增加了這些基類(lèi)的擴(kuò)展版參見(jiàn)圖13-17中部,如應(yīng)用程序類(lèi)C*App的基類(lèi)是從CWindApp派生的CWindAppEx類(lèi)、單文檔應(yīng)用程序的主框架窗口類(lèi)CMainFrame的基類(lèi)是從CFrameWnd派生的CFrameWndEx類(lèi)、多文檔應(yīng)用程序的主框架窗口類(lèi)CMainFrame的基類(lèi)是從CMDIFrameWnd派生的CMDIFrameWndEx類(lèi)、多文檔應(yīng)用程序的子框架窗口類(lèi)CChildFrame的基類(lèi)是從CMDIChildWnd派生的CMDIChildWn

30、dEx類(lèi)。文檔類(lèi)和文檔模板類(lèi)那么沒(méi)有變化。CObjectCCmdTargetCWndCWinTreadCWinAppCFrameWndCViewCScrollViewCDocTemplateCDocumentCSingleDocTemplateCMultiDocTemplateCTestAppCMainFrameCTestViewCChildFrameCTestDoc傳統(tǒng)MFC類(lèi)你的應(yīng)用程序類(lèi)CWinAppExCFrameWndExCMDIFrameWndCMDIChildWndCMDIFrameWndExCMDIChildWndExMFC功能包擴(kuò)展類(lèi)圖13-17 MFC應(yīng)用程序工程Test中

31、的主要類(lèi)及其基類(lèi)許多新功能都依賴(lài)于新版本擴(kuò)展類(lèi)CWinAppEx、CFrameWndEx和CMDIFrameWndEx,這些類(lèi)代表著大多數(shù)MFC應(yīng)用程序的根底。這些新的基類(lèi)提供了支持眾多新用戶(hù)界面功能如功能區(qū)、可停靠、可調(diào)整大小的窗口窗格、以及工作區(qū)持久性等所需的全部要素。.2 最小功能包應(yīng)用程序本小節(jié)的代碼顯示了可支持功能區(qū)欄的最小應(yīng)用程序?qū)ο?。程序的?yīng)用程序類(lèi)CMinApp由CWinAppEx派生而來(lái),可實(shí)現(xiàn)大家所熟悉的InitInstance成員函數(shù)通常用于創(chuàng)立應(yīng)用程序的主窗口。千萬(wàn)不要忘記調(diào)用SetRegistryKey成員函數(shù)來(lái)設(shè)置應(yīng)用程序的注冊(cè)表位置,因?yàn)樾碌募軜?gòu)類(lèi)都要依賴(lài)于它。然

32、后,InitInstance繼續(xù)以通常的方式創(chuàng)立主窗口。似中的最小MFC程序,需先創(chuàng)立一個(gè)名為Min的“Visual C+/Win32”的“Win32工程,在其“應(yīng)用程序設(shè)置頁(yè)中的“附加選項(xiàng)欄中,選中“空工程。并修改工程屬性中的“配置屬性/常規(guī)頁(yè)中的“工程默認(rèn)值欄的“MFC的使用為“在靜態(tài)庫(kù)中使用MFC或“在共享DLL中使用MFC。然后將下面的最小VC08 MFC功能包應(yīng)用程序的具體代碼之CPP文件添加到該工程中運(yùn)行結(jié)果如圖13-18所示:#include #include #include class CMainWindow : public CFrameWndEx public: CMai

33、nWindow();CMainWindow:CMainWindow() Create(NULL, /class name LMinimum Feature Pack CMyApp); /window nameclass CMinApp : public CWinAppEx public: virtual BOOL InitInstance();BOOL CMinApp:InitInstance() SetRegistryKey(LSYSUMinSample);/ 此處不能直接使用CFrameWndEx類(lèi)的保護(hù)型默認(rèn)構(gòu)造函數(shù)m_pMainWnd = new CMainWindow; m_pMai

34、nWnd-ShowWindow(m_nCmdShow); m_pMainWnd-UpdateWindow(); return TRUE;CMinApp theApp;圖13-18 最小功能包應(yīng)用程序例.3 Office功能區(qū)用戶(hù)界面利用MFC的功能包,我們可以非常輕松地向MFC框架窗口,添加與Microsoft Office 2007系統(tǒng)功能區(qū)元素類(lèi)似的功能區(qū)欄。從概念上講,功能區(qū)ribbon由多個(gè)被稱(chēng)為類(lèi)別category的選項(xiàng)卡tab組成,每個(gè)選項(xiàng)卡都承載著一組面板panel。反過(guò)來(lái),這些面板又承載著功能區(qū)元素或控件,它們分別代表特定于應(yīng)用程序的各種操作。如果功能區(qū)承載著應(yīng)用程序按鈕左上角

35、的大圓按鈕,那么在用戶(hù)單擊應(yīng)用程序按鈕時(shí)所顯示的彈出窗口中也會(huì)顯示一個(gè)面板,它被視為功能區(qū)的主類(lèi)別。CMFCRibbonBar類(lèi)可實(shí)現(xiàn)功能區(qū)欄本身,而CMFCRibbonCMyAppButton類(lèi)那么代表功能區(qū)欄所承載且顯示在窗口框架左上角的應(yīng)用程序按鈕。功能區(qū)欄通常是在WM_CREATE消息處理程序中創(chuàng)立和準(zhǔn)備的。要?jiǎng)?chuàng)立功能區(qū)欄,只需調(diào)用CMFCRibbonBar的Create成員函數(shù),以提供將其附加到其中的窗口框架的地址即可,然后根據(jù)需要填充它。AddMainCategory成員函數(shù)將主類(lèi)別添加到功能區(qū),并返回一個(gè)指向CMFCRibbonMainPanel的指針,你可以利用它向其中添加將要

36、顯示在此面板中的功能區(qū)元素。通過(guò)調(diào)用AddCategory成員函數(shù),可向其中添加更多的類(lèi)別來(lái)表示功能區(qū)的選項(xiàng)卡。AddCategory返回一個(gè)指向CMFCRibbonCategory對(duì)象你可使用其AddPanel成員函數(shù)向其中添加面板的指針。AddPanel返回一個(gè)指向CMFCRibbonPanel對(duì)象可像使用功能區(qū)的主面板一樣向其中添加功能區(qū)元素的指針。最后,你可使用CMFCVisualManager: SetDefaultManager靜態(tài)成員函數(shù)來(lái)設(shè)置負(fù)責(zé)處理框架窗口的樣式和外觀的可視化管理器。圖13-19顯示了功能區(qū)應(yīng)用程序的可能外觀,假定你已為功能區(qū)欄上的按鈕添加了必要的事件處理程序

37、。圖13-19 功能區(qū)應(yīng)用程序下面的代碼顯示了具有功能區(qū)欄和應(yīng)用程序按鈕的一個(gè)最小SDI框架窗口。其中的應(yīng)用程序按鈕并不是必需的,但通常會(huì)與功能區(qū)欄結(jié)合使用,為應(yīng)用程序提供各種各樣的主菜單,以代替?zhèn)鹘y(tǒng)的“文件菜單。class CMainWindow : public CFrameWndEx DECLARE_MESSAGE_MAP()public: CMainWindow(); int OnCreate(CREATESTRUCT* createStruct); CMFCRibbonBar m_ribbon; CMFCRibbonCMyAppButton m_appButton;BEGIN_MES

38、SAGE_MAP(CMainWindow, CFrameWndEx) ON_WM_CREATE()END_MESSAGE_MAP()CMainWindow:CMainWindow() Create(0/*class name*/, LMFC Ribbon Sample CMyApp/*window name*/);int CMainWindow:OnCreate(CREATESTRUCT* createStruct) if (-1 = _super:OnCreate(createStruct) return -1; if (-1 = m_ribbon.Create(this) return -

39、1; m_appButton.SetImage(IDB_APP_BUTTON); m_ribbon.SetCMyAppButton(&m_appButton, CSize(45, 45); CMFCRibbonMainPanel* appButtonMenu = m_ribbon.AddMainCategory(LMenu, IDB_APP_BUTTON_MENU_SMALL, IDB_APP_BUTTON_MENU_LARGE); appButtonMenu-Add(new CMFCRibbonButton(ID_FILE_NEW, L&New, 0, / small image index

40、 0); / large image index appButtonMenu-Add(new CMFCRibbonButton(ID_FILE_OPEN, L&Open., 1, / small image index 1); / large image indexappButtonMenu-AddToBottom(new CMFCRibbonMainPanelButton(ID_APP_EXIT, LE&xit, 15/*small image index*/);CMFCRibbonCategory* category = m_ribbon.AddCategory(LHome, IDB_RI

41、BBON_CAT_HOME_SMALL, IDB_RIBBON_CAT_HOME_LARGE); CMFCRibbonPanel* panel = category-AddPanel(LClipboard); panel-Add(new CMFCRibbonButton(ID_EDIT_PASTE, LPaste, 0, / small image index 0); / large image index panel-Add(new CMFCRibbonButton(ID_EDIT_CUT, LCut, 1); panel-Add(new CMFCRibbonButton(ID_EDIT_C

42、OPY, LCopy, 2); panel-Add(new CMFCRibbonButton(ID_EDIT_SELECT_ALL, LSelect All, -1); m_ribbon.AddCategory(LInsert, IDB_RIBBON_CAT_HOME_SMALL, IDB_RIBBON_CAT_HOME_LARGE); CMFCVisualManager:SetDefaultManager( RUNTIME_CLASS(CMFCVisualManagerOffice2007); CMFCVisualManagerOffice2007:SetStyle (CMFCVisualM

43、anagerOffice2007:Office2007_LunaBlue); return 0;.4 選項(xiàng)卡式多文檔界面MFC一直都支持 MDI 實(shí)現(xiàn)及其文檔/視圖體系結(jié)構(gòu),但圖13-20 a)中所示的傳統(tǒng) MDI早已過(guò)時(shí),用戶(hù)可能會(huì)認(rèn)為你的應(yīng)用程序從Windows 95開(kāi)始就再也沒(méi)有更新過(guò)?,F(xiàn)在,絕大多數(shù)用戶(hù)都期望可通過(guò)窗口邊緣的選項(xiàng)卡來(lái)訪問(wèn)多個(gè)文檔,而這正是新的CMDIFrameWndEx MDI框架窗口所提供的功能,參見(jiàn)圖13-20 b)。 a) 傳統(tǒng)MDIb) 選項(xiàng)卡式MDI圖13-20 多文檔界面的MFC應(yīng)用程序我們需要更新多文檔/視圖應(yīng)用程序?qū)ο笠灾С中碌目蚣艽翱?。下面的代碼顯示了

44、滿(mǎn)足需要的最小選項(xiàng)卡式MDI應(yīng)用程序?qū)ο?。class CMyApp : public CWinAppEx DECLARE_MESSAGE_MAP()public: virtual BOOL InitInstance();BEGIN_MESSAGE_MAP(CMyApp, CWinAppEx) ON_COMMAND(ID_FILE_NEW, &CWinAppEx:OnFileNew)END_MESSAGE_MAP()BOOL CMyApp:InitInstance() SetRegistryKey(LSampleCompanySampleProduct); VERIFY(InitContextM

45、enuManager();AddDocTemplate(new CMultiDocTemplate(IDR_CHILDFRAME,RUNTIME_CLASS(Document),RUNTIME_CLASS(CMDIChildWndEx),RUNTIME_CLASS(View); CMainWindow* mainWindow = new CMainWindow(); VERIFY(mainWindow-LoadFrame(IDR_MAINFRAME); m_pMainWnd = mainWindow; m_pMainWnd-ShowWindow(m_nCmdShow); m_pMainWnd-

46、UpdateWindow(); return TRUE;它類(lèi)似于傳統(tǒng)的 MDI 應(yīng)用程序?qū)ο?,但有幾點(diǎn)值得一提。首先,子窗口框架的運(yùn)行時(shí)類(lèi)是CMDIChildWndEx,而非傳統(tǒng)的CMDIChildWnd類(lèi)。要準(zhǔn)備在選項(xiàng)卡式視圖之間進(jìn)行切換時(shí)使用的菜單管理器,還需調(diào)用InitContextMenuManager函數(shù)。下面的代碼顯示了最小選項(xiàng)卡式MDI框架窗口。同樣,你會(huì)看到開(kāi)啟此功能是多么地簡(jiǎn)單。實(shí)際只需調(diào)用EnableMDITabbedGroups成員函數(shù)來(lái)啟用MDI選項(xiàng)卡式分組功能即可。CMDITabInfo類(lèi)提供了各種成員變量,可使用它們來(lái)自定義選項(xiàng)卡式分組的外觀和行為。顧名思義,它甚至

47、還允許用戶(hù)拖動(dòng)不同的視圖來(lái)創(chuàng)立垂直或水平對(duì)齊的選項(xiàng)卡組。class CMainWindow : public CMDIFrameWndEx DECLARE_DYNCREATE(CMainWindow) DECLARE_MESSAGE_MAP()private: int OnCreate(CREATESTRUCT* createStruct);IMPLEMENT_DYNCREATE(CMainWindow, CMDIFrameWndEx)BEGIN_MESSAGE_MAP(CMainWindow, CMDIFrameWndEx) ON_WM_CREATE()END_MESSAGE_MAP()in

48、t CMainWindow:OnCreate(CREATESTRUCT* createStruct) if (-1 = _super:OnCreate(createStruct) return -1; CMDITabInfo tabInfo; tabInfo.m_bAutoColor = true; tabInfo.m_bDocumentMenu = true; EnableMDITabbedGroups(true, tabInfo); return 0; 編寫(xiě)功能區(qū)應(yīng)用程序功能區(qū)ribbon用于代替?zhèn)鹘y(tǒng)的菜單和工具條,是微軟公司推崇的新圖形界面。MFC功能包提供了對(duì)功能區(qū)界面的支持,但是卻沒(méi)

49、有提供功能區(qū)資源的交互式設(shè)計(jì)界面。即將推出的Visual C+ 2021MFC 10.0可彌補(bǔ)這一缺陷。 MFC功能包手工編程下面通過(guò)一個(gè)簡(jiǎn)單的例子,來(lái)介紹如何用MFC功能包來(lái)創(chuàng)立一個(gè)新的功能區(qū)應(yīng)用程序,并在程序中手工添加自己的界面元素和代碼。此節(jié)所對(duì)應(yīng)的英文幫助文檔,位于VS08SP1的MSDN幫助系統(tǒng)的“目錄/開(kāi)發(fā)工具和語(yǔ)言/Visual Studio/Visual C+/參考信息/Libraries Reference/MFC Feature Pack for Visual C+ 2021/Walkthroughs/Walkthrough: Create a New Ribbon App

50、lication By Using MFC之中。1創(chuàng)立功能區(qū)應(yīng)用程序工程選“文件新建工程菜單項(xiàng)、或按“Ctrl+Shift+N組合鍵、或選“起始頁(yè)創(chuàng)立工程選項(xiàng)。在彈出的“新建工程對(duì)話框中,在左邊的“工程類(lèi)型欄中選“Visual C+MFC項(xiàng),在右邊的“模版欄中選“MFC應(yīng)用程序項(xiàng),在下邊的“位置欄選擇新工程目錄的父目錄所在的路徑如E:,在“名稱(chēng)欄中鍵入你的程序工程名如Rib,不選中“創(chuàng)立解決方案的目錄選項(xiàng),按“確定鈕,參見(jiàn)圖13-21。圖13-21 新建工程對(duì)話框在彈出的“MFC應(yīng)用程序向?qū)?duì)話框的歡送頁(yè)中,按“下一步按鈕或單擊左欄中的“應(yīng)用程序類(lèi)型項(xiàng),進(jìn)入該對(duì)話框的“應(yīng)用程序類(lèi)型頁(yè)。在“應(yīng)用

51、程序類(lèi)型頁(yè)右邊上部的“工程類(lèi)型欄,選中“Office單項(xiàng)選擇鈕默認(rèn)是“Visual Studio。保持“視覺(jué)樣式和顏色欄下拉式列表中的默認(rèn)“Office 2007藍(lán)色主題條目不變,同時(shí)保持“啟用視覺(jué)樣式切換復(fù)選框被選中。該頁(yè)的其余選項(xiàng)也保持默認(rèn)設(shè)置不變,參見(jiàn)圖13-22。圖13-22 選擇工程類(lèi)型和視覺(jué)樣式單擊左欄中的“用戶(hù)界面功能項(xiàng),進(jìn)入“MFC應(yīng)用程序向?qū)?duì)話框的“用戶(hù)界面功能頁(yè)。重要步驟在“用戶(hù)界面功能頁(yè)中,保持右邊“命令欄下部的“使用功能區(qū)單項(xiàng)選擇項(xiàng)被選中,參見(jiàn)下列圖13-23。圖13-23 選擇“使用功能區(qū)按“下一步鈕或單擊左邊的“高級(jí)功能項(xiàng),進(jìn)入“高級(jí)功能頁(yè)。為了簡(jiǎn)單起見(jiàn),我們這里

52、去選右邊“高級(jí)框架窗格欄中的所有復(fù)選框“導(dǎo)航窗格和“標(biāo)題欄默認(rèn)是選中的,參見(jiàn)圖13-24。圖13-24 去選高級(jí)框架窗格選項(xiàng)按“完成鈕關(guān)閉“MFC應(yīng)用程序向?qū)?duì)話框,向?qū)?huì)自動(dòng)生成對(duì)應(yīng)的工程。編譯運(yùn)行此工程,結(jié)果如圖13-25所示。圖13-25 功能區(qū)Office類(lèi)型的MFC功能包應(yīng)用程序例可見(jiàn),向?qū)槲覀兊膽?yīng)用程序自動(dòng)創(chuàng)立了一個(gè)功能區(qū),含有一個(gè)功能區(qū)類(lèi)別ribbon category選項(xiàng)卡tab,稱(chēng)為主要Home。該功能區(qū)類(lèi)別包含三個(gè)功能區(qū)面板ribbon panel分別叫做剪貼板Clipboard、視圖View和窗口Window。應(yīng)用程序功能區(qū)的其他菜單見(jiàn)圖13-26。a) 應(yīng)用程序大圖標(biāo)

53、的文件菜單b) 自定義快速訪問(wèn)工具欄菜單c) 樣式菜單圖13-25 MFC功能包應(yīng)用程序的功能區(qū)菜單2添加類(lèi)別到功能區(qū)由工程創(chuàng)立的功能區(qū)對(duì)象位于CMainFrame類(lèi)的頭文件中:CMFCRibbonBar m_wndRibbonBar;為了向該功能區(qū)增加新的類(lèi)別category對(duì)象,需要調(diào)用CMFCRibbonBar類(lèi)的成員函數(shù)AddCategory:CMFCRibbonCategory* AddCategory( LPCTSTR lpszName, / 類(lèi)別名,會(huì)出現(xiàn)在功能區(qū)的標(biāo)簽中 UINT uiSmallImagesResID, / 小圖片資源ID UINT uiLargeImagesR

54、esID, / 大圖片資源ID CSize sizeSmallImage=CSize(16, 16) 1, / 小圖片的尺寸,默認(rèn)為16*16 CSize sizeLargeImage=CSize(32, 32) 3, / 大圖片的尺寸,默認(rèn)為32*32 int nInsertAt=-1, / 插入位置序號(hào),默認(rèn)值-1表示添加到已有功能區(qū)類(lèi)別的后面 CRuntimeClass* pRTI=NULL / 指向運(yùn)行類(lèi)的指針);在CMainFrame類(lèi)的OnCreate函數(shù)的中部,已有如下兩行代碼用于創(chuàng)立和初始化功能區(qū)對(duì)象的:m_wndRibbonBar.Create(this); / 創(chuàng)立功能區(qū)控

55、件InitializeRibbon(); / 初始化定制功能區(qū)在CMainFrame類(lèi)的InitializeRibbon函數(shù)的底部,我們添加如下代碼:/ 添加“定制類(lèi)別對(duì)象:strTemp.LoadString(IDS_RIBBON_CUSTOM);CMFCRibbonCategory* pCategoryCustom =m_wndRibbonBar.AddCategory(strTemp, IDB_FILESMALL, IDB_FILELARGE);其中,strTemp 為原有的在InitializeRibbon函數(shù)起始處定義的局部串變量:CString strTemp;而CString 類(lèi)

56、的LoadString成員函數(shù):BOOL LoadString( UINT nID );用于裝入指定ID的串資源;IDS_RIBBON_CUSTOM是我們自己在工程的串表String Table資源中增加的新類(lèi)別名串“定制(&C)的ID;而IDB_FILESMALL和IDB_FILELARGE那么為已有的小和大文件圖片資源的ID。編譯運(yùn)行修改后的工程,結(jié)果是功能區(qū)中新增加了空的“定制類(lèi)別對(duì)象,如圖13-26所示。圖13-26 添加“定制類(lèi)別到功能區(qū)3添加面板到類(lèi)別一個(gè)功能區(qū)面板ribbon pane內(nèi)含有一組邏輯相關(guān)的元素item。為了添加功能區(qū)面板到功能區(qū)類(lèi)別,你可以使用CMFCRibbon

57、Category類(lèi)的AddPanel method函數(shù):CMFCRibbonPanel* AddPanel( LPCTSTR lpszPanelName, / 面板名 HICON hIcon=0, / 圖標(biāo)句柄,用于快速訪問(wèn)工具條 CRuntimeClass* pRTI=NULL / 指向運(yùn)行類(lèi)的指針);例如,在CMainFrame類(lèi)的InitializeRibbon函數(shù)的底部,在你剛剛的添加功能區(qū)類(lèi)別的代碼后,添加如下代碼:/ 創(chuàng)立并添加“喜愛(ài)面板:strTemp.LoadString(IDS_RIBBON_FAVORITES);CMFCRibbonPanel* pPanelFavorite

58、s =pCategoryCustom-AddPanel(strTemp, m_PanelImages.ExtractIcon(15);其中,IDS_RIBBON_FAVORITES是我們自己在工程的串表資源中增加的新面板名串“喜愛(ài)的ID;m_PanelImages為工程創(chuàng)立時(shí)自動(dòng)定義的一個(gè)CMFCToolBarImages類(lèi)對(duì)象,已經(jīng)裝入了工程中已有的位圖資源IDB_BUTTONS對(duì)應(yīng)的位圖文件為res,含有27個(gè)圖標(biāo),參見(jiàn)圖13-27。圖13-27 工程的按鈕位圖資源IDB_BUTTONS參見(jiàn)InitializeRibbon函數(shù)頂部處的代碼:/ 加載面板圖像:m_PanelImages.Se

59、tImageSize(CSize(16, 16);m_PanelImages.Load(IDB_BUTTONS);而CMFCToolBarImages類(lèi)的ExtractIcon成員函數(shù):HICON ExtractIcon( int nIndex );的功能是從工具條位圖中提取指定序號(hào)的圖片,并返回對(duì)應(yīng)圖標(biāo)的句柄。編譯運(yùn)行,結(jié)果如圖13-28所示??梢?jiàn),在功能區(qū)的“定制類(lèi)別選項(xiàng)卡的左邊,出現(xiàn)了一個(gè)“喜愛(ài)面板。圖13-28 添加“喜愛(ài)面板到“定制類(lèi)別4添加元素到面板為了添加元素到上一步所創(chuàng)立的面板里,可以調(diào)用CMFCRibbonPanel類(lèi)的Add方法:virtual void Add( CMFC

60、RibbonBaseElement* pElem );其中的CMFCRibbonBaseElement類(lèi),是所有能被添加到面板中的元素如按鈕、復(fù)選框、和組合框等的基類(lèi)。我們首先添加一個(gè)“打印按鈕,它將具有一個(gè)子菜單,包含一個(gè)使用默認(rèn)打印機(jī)打印的“快速打印命令。這兩個(gè)命令都已經(jīng)被定義在此應(yīng)用程序的應(yīng)用程序大圖標(biāo)的菜單中。在CMainFrame類(lèi)的InitializeRibbon函數(shù)的底部,在你剛剛的添加功能區(qū)面板的代碼后,添加如下代碼:/ 創(chuàng)立“快速打印按鈕:strTemp.LoadString(IDS_RIBBON_PRINT_QUICK);CMFCRibbonButton* pBtnFavP

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論