官术网_书友最值得收藏!

  • 21天學通Visual C++
  • 張志美等編著
  • 3454字
  • 2019-01-09 13:53:32

2.2 MFC的基本概念及應用程序框架

應用程序框架是一個集合,其可以提供一般應用程序所需的全部面向對象軟件組件。或者說,一個應用程序框架是一個類庫的超級集合。一個應用程序框架不同于單純的類的集合,其自己定義了程序的結構。

比如奔馳汽車的生產廠家,其可以生成所有的奔馳汽車的零件,并有其自己的生產線,那么這個廠家就是一個應用程序框架。在這個框架中,可以生產出很多型號的奔馳汽車,如圖2-5所示。

圖2-5 應用程序框架

在介紹使用MFC(Microsoft Fundation Classes,微軟基礎類庫)應用程序框架開發Windows應用程序后,讀者可將傳統Windows的編程方法與MFC框架進行對比。

2.2.1 MFC的基本概念

MFC即微軟基礎類庫,其位于任何Windows API之上。在這個類庫中包含了一百多個程序開發過程中最常用到的類,大多數的MFC類都是直接或間接從CObject類派生出來的,CObject類是MFC類庫的基類。形象地說,MFC就是一個人才管理中心,其中有許許多多掌握了各種技能的人,有工程師、教師、醫生等。當社會需要某種技能的人時,就從該MFC中取出并應用到環境中,如圖2-6所示。

圖2-6 MFC

近年來,面向對象技術無論在理論上還是實踐上都在飛速發展。面向對象技術中最重要的就是“對象”的概念。它把現實世界中的人、機器等客觀實體抽象成程序中的“對象”。這種“對象”具有一定的屬性和方法,這里的屬性指對象本身的各種特性參數。如人的體重、機器的體積等,而方法是指對象本身所能執行的功能,如人能行走、機器能運作等。

對于有過SDK編程經歷的開發者,一定會對其煩瑣的編程方式和大量的API調用頗有感觸。而MFC類庫通過將API函數進行分類封裝,大大簡化了編程的難度,利用MFC進行Windows程序開發,只需要進行少量的工作便能完成相同的任務。同時,MFC編程還具有C++編程的所有優點,例如繼承和封裝。正是由于MFC編程方法充分利用了面向對象技術的優點,使得用戶在編程時極少需要關心對象方法的實現細節,而只需簡單地調用已有對象的方法就可以了。

當MFC類庫中的類方法不能滿足用戶需求時,可以利用面向對象中的繼承方法從類庫中的已有類派生出自己需要的類。這些派生出來的類除了具有基類的所有特性和功能外,還可以根據需要添加新的屬性和方法。這使得應用程序中程序員所需要編寫的代碼大為減少,從而有力地保證了程序良好的可調試性。MFC不僅給用戶提供了Windows圖形環境下應用程序的框架,還提供了創建應用程序的組件。

簡單地說,MFC的優點可歸結為以下幾點。

● MFC是C++的Microsoft Windows應用程序編程接口。

● MFC開發的應用程序使用了標準化的結構。

● 使用MFC開發的應用程序不僅小,而且運行快。

● Visual C++工具降低了編碼的復雜性。

● MFC庫功能豐富(具體功能請參見MFC相關資料)。

說明

MFC中封裝的對象都是Windows程序設計中常用的對象。此外,讀者可以對其中的對象進行繼承,從而派生出符合用戶要求的更具體的對象。

2.2.2 使用應用程序向導創建MFC應用程序框架

在第1章創建第一個Windows程序“Hello World”時,讀者已經了解了使用AppWizard創建應用程序的大概步驟。為了使讀者更好地理解MFC應用程序框架的優勢,本節將通過圖例具體介紹使用AppWizard應用程序向導生成一個MFC應用程序框架的每一個步驟。

【范例2-1】該實例生成一個應用程序窗體,有菜單欄、工具欄、狀態欄、最大化、最小化、關閉等窗口的基本組成部分。

1 啟動Visual C++ 6.0。在【File】菜單中單擊【New】命令,打開【New】對話框,如圖2-7所示。在該窗體中選擇【Projects】選項卡,然后在左側窗口選擇【MFC AppWizard[exe]】選項,在右側的【Project Name】(項目名)文本框中為新建的項目輸入一個名稱,如Test。

圖2-7 新建MFC應用程序

2 單擊【OK】按鈕,彈出【MFC AppWizard - Step1】對話框,如圖2-8所示。在該對話框中,用戶可以選擇生成哪種類型的應用程序,可供選擇的類型有如下三種。

圖2-8 選擇應用程序框架

● 單文檔(Single document):選擇該單選按鈕,應用程序會生成一個單文檔/視圖應用程序框架。

● 多文檔(Multiple documens):選擇該單選按鈕,應用程序會生成一個多文檔/視圖應用程序框架。

● 基于對話框(Dialog based):選擇該單選按鈕,應用程序會生成一個基于對話框的應用程序框架。

這里選擇【Single document】單選按鈕,建立單文檔/視圖應用程序框架,其他的按默認設置。

提示

圖2-8中的復選框【Document/View architecture support】表示是否支持文檔/視圖查看體系結構,一般選中該復選框。

3 單擊【Next】按鈕,彈出【MFC AppWizard - Step 2 of 6】對話框,如圖2-9所示。該步驟詢問用戶應用程序是否支持數據庫。數據庫支持的類型有如下4種。

圖2-9 選擇數據庫支持

● 無數據庫(None):默認選項。

● 僅支持頭文件(Header files only):指定支持文檔和視圖中存儲數據庫或記錄集對象。

● 不支持文件的數據庫(Database view without file support):指定數據庫和多記錄集,無序列化,若只訪問數據庫信息而無須寫回,則選擇此項。

● 文件支持的數據庫(Database view with file support):完全數據庫支持,包括序列化和與文檔相關的菜單命令,即可以讀寫數據庫。

這里選擇【None】單選按鈕,即不需支持數據庫。

4 單擊【Next】按鈕,彈出【MFC AppWizard - Step 3 of 6】對話框,如圖2-10所示。該步驟詢問用戶應用程序支持何種復合文檔。復合文檔支持的各選項功能如下。

圖2-10 選擇復合文件支持

● 無復合文檔支持(None):即無OLE(Object Linking and Embedding,對象鏈接與嵌入)支持。

● 容器支持(Container):將對象嵌入或鏈接到文檔,以便用戶編輯。

● 袖珍服務器(Mini-server):表示應用服務可創建和管理復合文檔對象,但不能獨立運行且僅支持嵌入項。

● 完全服務器(Full-server):表示應用程序可創建和管理復合文檔對象,能夠獨立運行,并且支持鏈接項的同時支持嵌入項。

● 容器/完全服務器(Both container and server):表示應用程序既可以是容器,又可以是服務器。容器是可將鏈接項或嵌入項并入自己文檔中的應用程序。服務器是可創建供容器應用程序使用的自動化項的應用程序。

一般來說,選擇【None】單選按鈕即可,其他按默認設置。

說明

當用戶選中后兩個選項中的其中一個后,【Data Source】按鈕變為可用,單擊該按鈕可為應用程序選擇關聯數據的類型、驅動程序和數據源等,這些將在后續章節詳細介紹。

5 單擊【Next】按鈕,彈出【MFC AppWizard - Step 4 of 6】對話框,如圖2-11所示。該步驟詢問用戶生成何種特征的應用程序:增加一個工具欄(Docking toolbar),增加一個狀態欄(Initial status bar),生成打印和預覽命令的代碼(Printing and print preview),生成支持上下文相關幫助的幫助文件(Context-sensitive Help),支持三維效果(3D controls),使應用程序能夠創建、操作、傳輸和存儲郵件消息(MAPI Messaging API),支持Windows Sockets。一般來說,建議這里所有的選項都采用默認的設置。

圖2-11 選擇應用程序界面

6 單擊【Next】按鈕,彈出【MFC AppWizard - Step 5 of 6】對話框,如圖2-12所示。該步驟詢問工程的樣式、是否生成源文件注釋及怎樣使用MFC類庫,一般都按默認設置。

圖2-12 選擇工程樣式、源文件注釋和MFC庫使用方式

7 單擊【Next】按鈕,彈出【MFC AppWizard - Step 6 of 6】對話框,如圖2-13所示。該步驟對話框中的默認設置確定了類的名稱及其所在文件的名稱。用戶可以自主更改名稱,但建議使用向導自動生成的名稱,這樣更易于區分。

圖2-13 確定類和文件名稱

8 單擊【Finish】按鈕,彈出【New Project Information】對話框,如圖2-14所示。該對話框主要顯示創建的文件清單。最后單擊【OK】按鈕,即可完成一個應用程序框架的創建。

圖2-14 顯示創建文件清單

提示

在Visual C++ 6.0中,AppWizard向導允許讀者選用MFC類庫中其他視圖類作為應用程序視圖類的基類。不一定非要是默認的CView類,可以改成CEditView類。這里全部采用默認設置。

【運行結果】通過上述步驟,已經生成一個使用MFC基本類庫的應用程序基本框架(單文檔/視圖結構的應用程序框架)。該框架可以運行,結果如圖2-15所示。

圖2-15 運行基本框架

【范例解析】該范例運行之后,讀者會發現這個應用程序框架具備Windows程序的所有特性,菜單欄、工具欄、狀態欄、圖標甚至還有關于對話框、打印預覽等,這就是AppWizard通過MFC動態創建的一個應用程序框架。

在該范例中,讀者不需從第一個步驟依次執行到最后一個步驟。如果讀者在后續步驟中的設置均使用默認設置,那么可以在第二個步驟中直接單擊【Finish】按鈕結束向導。

從上述步驟可以看出,用Visual C++ 6.0中MFC設計Windows應用程序的便捷,用戶還可以根據不同的應用選擇不同的選項。至此,一個最簡單的Windows應用程序就創建好了。

提示

如果需要在該窗體的第一行和第一列中顯示文字,如“Hello World!”,只需找到OnDraw成員函數,輸入“pDC->TextOut(0,0," Hello World!");”代碼即可。

相比Win32編程而言,WinMain函數都不見了。事實上,WinMain函數并沒有不見,也不是Windows程序結構發生了變化,這都是MFC的效果。在該應用程序框架的底層仍然采用的是WinMain函數和WndProc回調函數,只是其被MFC封裝在各個類中了,然后MFC通過應用程序向導生成了這些類,用戶向這個類添加一些內容即可,如重載函數、消息處理函數等。

讀者可以看到,在Windows編程中,MFC程序框架就好比是一座大樓的主梁。主梁都有后,程序員所要做的就是添磚加瓦。而在Win32程序中,甚至主梁都要程序員自己搭建,這樣做的效率是非常低的。因此,使用MFC進行Windows程序設計是非常方便的。

主站蜘蛛池模板: 信丰县| 静宁县| 安康市| 玉门市| 兰溪市| 疏勒县| 浙江省| 会东县| 元江| 信宜市| 大兴区| 万安县| 旺苍县| 牙克石市| 吴堡县| 怀宁县| 白玉县| 房山区| 虹口区| 甘南县| 乳山市| 准格尔旗| 铜川市| 鄂伦春自治旗| 都匀市| 遵义市| 剑阁县| 兴文县| 马关县| 裕民县| 浙江省| 青铜峡市| 池州市| 云浮市| 景德镇市| 正阳县| 阜康市| 东山县| 定日县| 富源县| 霸州市|