- 21天學(xué)通Visual C++
- 張志美等編著
- 3454字
- 2019-01-09 13:53:32
2.2 MFC的基本概念及應(yīng)用程序框架
應(yīng)用程序框架是一個(gè)集合,其可以提供一般應(yīng)用程序所需的全部面向?qū)ο筌浖M件。或者說,一個(gè)應(yīng)用程序框架是一個(gè)類庫的超級集合。一個(gè)應(yīng)用程序框架不同于單純的類的集合,其自己定義了程序的結(jié)構(gòu)。
比如奔馳汽車的生產(chǎn)廠家,其可以生成所有的奔馳汽車的零件,并有其自己的生產(chǎn)線,那么這個(gè)廠家就是一個(gè)應(yīng)用程序框架。在這個(gè)框架中,可以生產(chǎn)出很多型號的奔馳汽車,如圖2-5所示。

圖2-5 應(yīng)用程序框架
在介紹使用MFC(Microsoft Fundation Classes,微軟基礎(chǔ)類庫)應(yīng)用程序框架開發(fā)Windows應(yīng)用程序后,讀者可將傳統(tǒng)Windows的編程方法與MFC框架進(jìn)行對比。
2.2.1 MFC的基本概念
MFC即微軟基礎(chǔ)類庫,其位于任何Windows API之上。在這個(gè)類庫中包含了一百多個(gè)程序開發(fā)過程中最常用到的類,大多數(shù)的MFC類都是直接或間接從CObject類派生出來的,CObject類是MFC類庫的基類。形象地說,MFC就是一個(gè)人才管理中心,其中有許許多多掌握了各種技能的人,有工程師、教師、醫(yī)生等。當(dāng)社會需要某種技能的人時(shí),就從該MFC中取出并應(yīng)用到環(huán)境中,如圖2-6所示。

圖2-6 MFC
近年來,面向?qū)ο蠹夹g(shù)無論在理論上還是實(shí)踐上都在飛速發(fā)展。面向?qū)ο蠹夹g(shù)中最重要的就是“對象”的概念。它把現(xiàn)實(shí)世界中的人、機(jī)器等客觀實(shí)體抽象成程序中的“對象”。這種“對象”具有一定的屬性和方法,這里的屬性指對象本身的各種特性參數(shù)。如人的體重、機(jī)器的體積等,而方法是指對象本身所能執(zhí)行的功能,如人能行走、機(jī)器能運(yùn)作等。
對于有過SDK編程經(jīng)歷的開發(fā)者,一定會對其煩瑣的編程方式和大量的API調(diào)用頗有感觸。而MFC類庫通過將API函數(shù)進(jìn)行分類封裝,大大簡化了編程的難度,利用MFC進(jìn)行Windows程序開發(fā),只需要進(jìn)行少量的工作便能完成相同的任務(wù)。同時(shí),MFC編程還具有C++編程的所有優(yōu)點(diǎn),例如繼承和封裝。正是由于MFC編程方法充分利用了面向?qū)ο蠹夹g(shù)的優(yōu)點(diǎn),使得用戶在編程時(shí)極少需要關(guān)心對象方法的實(shí)現(xiàn)細(xì)節(jié),而只需簡單地調(diào)用已有對象的方法就可以了。
當(dāng)MFC類庫中的類方法不能滿足用戶需求時(shí),可以利用面向?qū)ο笾械睦^承方法從類庫中的已有類派生出自己需要的類。這些派生出來的類除了具有基類的所有特性和功能外,還可以根據(jù)需要添加新的屬性和方法。這使得應(yīng)用程序中程序員所需要編寫的代碼大為減少,從而有力地保證了程序良好的可調(diào)試性。MFC不僅給用戶提供了Windows圖形環(huán)境下應(yīng)用程序的框架,還提供了創(chuàng)建應(yīng)用程序的組件。
簡單地說,MFC的優(yōu)點(diǎn)可歸結(jié)為以下幾點(diǎn)。
● MFC是C++的Microsoft Windows應(yīng)用程序編程接口。
● MFC開發(fā)的應(yīng)用程序使用了標(biāo)準(zhǔn)化的結(jié)構(gòu)。
● 使用MFC開發(fā)的應(yīng)用程序不僅小,而且運(yùn)行快。
● Visual C++工具降低了編碼的復(fù)雜性。
● MFC庫功能豐富(具體功能請參見MFC相關(guān)資料)。
說明
MFC中封裝的對象都是Windows程序設(shè)計(jì)中常用的對象。此外,讀者可以對其中的對象進(jìn)行繼承,從而派生出符合用戶要求的更具體的對象。
2.2.2 使用應(yīng)用程序向?qū)?chuàng)建MFC應(yīng)用程序框架
在第1章創(chuàng)建第一個(gè)Windows程序“Hello World”時(shí),讀者已經(jīng)了解了使用AppWizard創(chuàng)建應(yīng)用程序的大概步驟。為了使讀者更好地理解MFC應(yīng)用程序框架的優(yōu)勢,本節(jié)將通過圖例具體介紹使用AppWizard應(yīng)用程序向?qū)梢粋€(gè)MFC應(yīng)用程序框架的每一個(gè)步驟。
【范例2-1】該實(shí)例生成一個(gè)應(yīng)用程序窗體,有菜單欄、工具欄、狀態(tài)欄、最大化、最小化、關(guān)閉等窗口的基本組成部分。
1 啟動Visual C++ 6.0。在【File】菜單中單擊【New】命令,打開【New】對話框,如圖2-7所示。在該窗體中選擇【Projects】選項(xiàng)卡,然后在左側(cè)窗口選擇【MFC AppWizard[exe]】選項(xiàng),在右側(cè)的【Project Name】(項(xiàng)目名)文本框中為新建的項(xiàng)目輸入一個(gè)名稱,如Test。

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

圖2-8 選擇應(yīng)用程序框架
● 單文檔(Single document):選擇該單選按鈕,應(yīng)用程序會生成一個(gè)單文檔/視圖應(yīng)用程序框架。
● 多文檔(Multiple documens):選擇該單選按鈕,應(yīng)用程序會生成一個(gè)多文檔/視圖應(yīng)用程序框架。
● 基于對話框(Dialog based):選擇該單選按鈕,應(yīng)用程序會生成一個(gè)基于對話框的應(yīng)用程序框架。
這里選擇【Single document】單選按鈕,建立單文檔/視圖應(yīng)用程序框架,其他的按默認(rèn)設(shè)置。
提示
圖2-8中的復(fù)選框【Document/View architecture support】表示是否支持文檔/視圖查看體系結(jié)構(gòu),一般選中該復(fù)選框。
3 單擊【Next】按鈕,彈出【MFC AppWizard - Step 2 of 6】對話框,如圖2-9所示。該步驟詢問用戶應(yīng)用程序是否支持?jǐn)?shù)據(jù)庫。數(shù)據(jù)庫支持的類型有如下4種。

圖2-9 選擇數(shù)據(jù)庫支持
● 無數(shù)據(jù)庫(None):默認(rèn)選項(xiàng)。
● 僅支持頭文件(Header files only):指定支持文檔和視圖中存儲數(shù)據(jù)庫或記錄集對象。
● 不支持文件的數(shù)據(jù)庫(Database view without file support):指定數(shù)據(jù)庫和多記錄集,無序列化,若只訪問數(shù)據(jù)庫信息而無須寫回,則選擇此項(xiàng)。
● 文件支持的數(shù)據(jù)庫(Database view with file support):完全數(shù)據(jù)庫支持,包括序列化和與文檔相關(guān)的菜單命令,即可以讀寫數(shù)據(jù)庫。
這里選擇【None】單選按鈕,即不需支持?jǐn)?shù)據(jù)庫。
4 單擊【Next】按鈕,彈出【MFC AppWizard - Step 3 of 6】對話框,如圖2-10所示。該步驟詢問用戶應(yīng)用程序支持何種復(fù)合文檔。復(fù)合文檔支持的各選項(xiàng)功能如下。

圖2-10 選擇復(fù)合文件支持
● 無復(fù)合文檔支持(None):即無OLE(Object Linking and Embedding,對象鏈接與嵌入)支持。
● 容器支持(Container):將對象嵌入或鏈接到文檔,以便用戶編輯。
● 袖珍服務(wù)器(Mini-server):表示應(yīng)用服務(wù)可創(chuàng)建和管理復(fù)合文檔對象,但不能獨(dú)立運(yùn)行且僅支持嵌入項(xiàng)。
● 完全服務(wù)器(Full-server):表示應(yīng)用程序可創(chuàng)建和管理復(fù)合文檔對象,能夠獨(dú)立運(yùn)行,并且支持鏈接項(xiàng)的同時(shí)支持嵌入項(xiàng)。
● 容器/完全服務(wù)器(Both container and server):表示應(yīng)用程序既可以是容器,又可以是服務(wù)器。容器是可將鏈接項(xiàng)或嵌入項(xiàng)并入自己文檔中的應(yīng)用程序。服務(wù)器是可創(chuàng)建供容器應(yīng)用程序使用的自動化項(xiàng)的應(yīng)用程序。
一般來說,選擇【None】單選按鈕即可,其他按默認(rèn)設(shè)置。
說明
當(dāng)用戶選中后兩個(gè)選項(xiàng)中的其中一個(gè)后,【Data Source】按鈕變?yōu)榭捎茫瑔螕粼摪粹o可為應(yīng)用程序選擇關(guān)聯(lián)數(shù)據(jù)的類型、驅(qū)動程序和數(shù)據(jù)源等,這些將在后續(xù)章節(jié)詳細(xì)介紹。
5 單擊【Next】按鈕,彈出【MFC AppWizard - Step 4 of 6】對話框,如圖2-11所示。該步驟詢問用戶生成何種特征的應(yīng)用程序:增加一個(gè)工具欄(Docking toolbar),增加一個(gè)狀態(tài)欄(Initial status bar),生成打印和預(yù)覽命令的代碼(Printing and print preview),生成支持上下文相關(guān)幫助的幫助文件(Context-sensitive Help),支持三維效果(3D controls),使應(yīng)用程序能夠創(chuàng)建、操作、傳輸和存儲郵件消息(MAPI Messaging API),支持Windows Sockets。一般來說,建議這里所有的選項(xiàng)都采用默認(rèn)的設(shè)置。

圖2-11 選擇應(yīng)用程序界面
6 單擊【Next】按鈕,彈出【MFC AppWizard - Step 5 of 6】對話框,如圖2-12所示。該步驟詢問工程的樣式、是否生成源文件注釋及怎樣使用MFC類庫,一般都按默認(rèn)設(shè)置。

圖2-12 選擇工程樣式、源文件注釋和MFC庫使用方式
7 單擊【Next】按鈕,彈出【MFC AppWizard - Step 6 of 6】對話框,如圖2-13所示。該步驟對話框中的默認(rèn)設(shè)置確定了類的名稱及其所在文件的名稱。用戶可以自主更改名稱,但建議使用向?qū)ё詣由傻拿Q,這樣更易于區(qū)分。

圖2-13 確定類和文件名稱
8 單擊【Finish】按鈕,彈出【New Project Information】對話框,如圖2-14所示。該對話框主要顯示創(chuàng)建的文件清單。最后單擊【OK】按鈕,即可完成一個(gè)應(yīng)用程序框架的創(chuàng)建。

圖2-14 顯示創(chuàng)建文件清單
提示
在Visual C++ 6.0中,AppWizard向?qū)г试S讀者選用MFC類庫中其他視圖類作為應(yīng)用程序視圖類的基類。不一定非要是默認(rèn)的CView類,可以改成CEditView類。這里全部采用默認(rèn)設(shè)置。
【運(yùn)行結(jié)果】通過上述步驟,已經(jīng)生成一個(gè)使用MFC基本類庫的應(yīng)用程序基本框架(單文檔/視圖結(jié)構(gòu)的應(yīng)用程序框架)。該框架可以運(yùn)行,結(jié)果如圖2-15所示。

圖2-15 運(yùn)行基本框架
【范例解析】該范例運(yùn)行之后,讀者會發(fā)現(xiàn)這個(gè)應(yīng)用程序框架具備Windows程序的所有特性,菜單欄、工具欄、狀態(tài)欄、圖標(biāo)甚至還有關(guān)于對話框、打印預(yù)覽等,這就是AppWizard通過MFC動態(tài)創(chuàng)建的一個(gè)應(yīng)用程序框架。
在該范例中,讀者不需從第一個(gè)步驟依次執(zhí)行到最后一個(gè)步驟。如果讀者在后續(xù)步驟中的設(shè)置均使用默認(rèn)設(shè)置,那么可以在第二個(gè)步驟中直接單擊【Finish】按鈕結(jié)束向?qū)А?/p>
從上述步驟可以看出,用Visual C++ 6.0中MFC設(shè)計(jì)Windows應(yīng)用程序的便捷,用戶還可以根據(jù)不同的應(yīng)用選擇不同的選項(xiàng)。至此,一個(gè)最簡單的Windows應(yīng)用程序就創(chuàng)建好了。
提示
如果需要在該窗體的第一行和第一列中顯示文字,如“Hello World!”,只需找到OnDraw成員函數(shù),輸入“pDC->TextOut(0,0," Hello World!");”代碼即可。
相比Win32編程而言,WinMain函數(shù)都不見了。事實(shí)上,WinMain函數(shù)并沒有不見,也不是Windows程序結(jié)構(gòu)發(fā)生了變化,這都是MFC的效果。在該應(yīng)用程序框架的底層仍然采用的是WinMain函數(shù)和WndProc回調(diào)函數(shù),只是其被MFC封裝在各個(gè)類中了,然后MFC通過應(yīng)用程序向?qū)闪诉@些類,用戶向這個(gè)類添加一些內(nèi)容即可,如重載函數(shù)、消息處理函數(shù)等。
讀者可以看到,在Windows編程中,MFC程序框架就好比是一座大樓的主梁。主梁都有后,程序員所要做的就是添磚加瓦。而在Win32程序中,甚至主梁都要程序員自己搭建,這樣做的效率是非常低的。因此,使用MFC進(jìn)行Windows程序設(shè)計(jì)是非常方便的。
- 我的J2EE成功之路
- Practical Ansible 2
- Getting Started with Oracle SOA B2B Integration:A Hands-On Tutorial
- 機(jī)器自動化控制器原理與應(yīng)用
- 智能工業(yè)報(bào)警系統(tǒng)
- Python Data Science Essentials
- VB語言程序設(shè)計(jì)
- Hadoop Real-World Solutions Cookbook(Second Edition)
- Supervised Machine Learning with Python
- Hybrid Cloud for Architects
- The Python Workshop
- 工業(yè)機(jī)器人維護(hù)與保養(yǎng)
- 網(wǎng)絡(luò)服務(wù)搭建、配置與管理大全(Linux版)
- 從零開始學(xué)SQL Server
- 貫通Java Web輕量級應(yīng)用開發(fā)