摘 要 MFC由于其優(yōu)秀的特性和體系結(jié)構(gòu)被廣泛應(yīng)用。介紹了MFC的設(shè)計(jì)目標(biāo)及優(yōu)缺點(diǎn),從文件類、窗口類及數(shù)據(jù)庫支持等三個(gè)方面重點(diǎn)闡述了MFC的層次結(jié)構(gòu),通過編寫名為“MFC單文檔應(yīng)用程序”的單文檔應(yīng)用程序說明了MFC的設(shè)計(jì)原理。
關(guān)鍵詞 微軟基本類庫 層次設(shè)計(jì) 文件類 窗口類
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A
Development Principle on MFC Computer Integration Technology
DU Hao
(Hubei University Of Technology, Wuhan, Hubei 430068)
Abstract MFC is widely used due to its excellent features and architectures. In this paper the objectives, advantages and disadvantages of MFC are introduced. The hierarchy of MFC is classified into three types: the File class, the window class and database support. The design principle is illustrated through writing a single document MFC program named\"MFC single document program\".
Key words MFC; hierarchy design; CFile; CWnd
0 緒論
Microsoft Visual C++(簡稱VC)是由微軟公司推出的基于面向?qū)ο蟮目梢暬删幊滔到y(tǒng),由于VC強(qiáng)大的自動編譯功能、高級除錯(cuò)功能和“語法高亮”功能,被廣泛應(yīng)用于各類軟件中。封裝Win32 API 函數(shù)的基本類庫(Microsoft Foundation Class Library,簡稱MFC)提供了圖形環(huán)境下應(yīng)用程序的框架及創(chuàng)建應(yīng)用程序的組件,通過Wizard功能簡化了Windows應(yīng)用程序的編寫工作。MFC提供了大量基類和可重用類庫供用戶使用,并允許用戶根據(jù)不同應(yīng)用環(huán)境進(jìn)行擴(kuò)充和自定義。大多數(shù)MFC是從CObject基類派生的,可以在運(yùn)行時(shí)獲得對象大小和名字。
MFC被廣泛應(yīng)用于用戶交互界面的開發(fā)、①Pro/E二次開發(fā)、②UG的二次開發(fā)③④⑤、生物醫(yī)學(xué)圖像處理⑥等方面,本文從MFC的設(shè)計(jì)目標(biāo)及優(yōu)缺點(diǎn)出發(fā),闡述MFC的層次設(shè)計(jì),并通過實(shí)例介紹MFC的編程原理。
1 MFC的設(shè)計(jì)目標(biāo)及優(yōu)缺點(diǎn)
1.1 MFC的設(shè)計(jì)目標(biāo)
MFC主要有兩個(gè)設(shè)計(jì)目標(biāo):一是為Windows操作系統(tǒng)提供一個(gè)面向?qū)ο蟮慕涌凇4四繕?biāo)通過編寫類來封裝窗口、對話框及其他對象,并引入適當(dāng)?shù)奶摵瘮?shù)來完成。二是在不需強(qiáng)加系統(tǒng)過多工作和不增加應(yīng)用程序?qū)?nèi)存不必要開銷的前提下,支持可重用、自包含性及其它面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP)原則。⑦該目標(biāo)要求用戶盡早選擇MFC窗口、菜單及其他對象的封裝方法。
1.2 MFC的優(yōu)缺點(diǎn)
MFC在特性和體系結(jié)構(gòu)上有很多優(yōu)點(diǎn):MFC包含文檔/視圖體系結(jié)構(gòu)、多文檔界面(MDI)、打印支持、Active X空間支持、數(shù)據(jù)庫支持、網(wǎng)絡(luò)支持、Windows系統(tǒng)常用控件支持和多線程支持等。MFC不僅利用C++語言特性從框架類中派生自定義類,節(jié)約用戶的時(shí)間和精力,而且MFC的分層設(shè)計(jì)使得用戶可以根據(jù)需要擴(kuò)展框架。同時(shí),MFC的缺點(diǎn)也相當(dāng)明顯:MFC編程較為繁瑣,程序入口較為復(fù)雜,函數(shù)名多,函數(shù)及其用法不易掌握。
2 MFC的層次設(shè)計(jì)
與目錄結(jié)構(gòu)類似,MFC對象層次包含一個(gè)根對象CObject,其它大多數(shù)對象是由此根對象派生而來,如處理命令消息的CCmdTarget類及其派生類、控制窗口的CWnd類及其派生類。下面分別從文件類、窗口類及數(shù)據(jù)庫支持來介紹MFC的層次。
文件類CFile包含很多C++類中的Windows API調(diào)用,標(biāo)準(zhǔn)I/O文件使用fgets()和fputs()函數(shù)進(jìn)行輸入和輸出,為了實(shí)現(xiàn)文檔格式的轉(zhuǎn)換,采用串行化將數(shù)據(jù)類成員變量按順序存儲到磁盤。文件類結(jié)構(gòu)如圖1所示,主要包含四個(gè)子類:CMemFile類允許用戶在內(nèi)存中創(chuàng)建文件;COleStreamFile表示數(shù)據(jù)流作為OLE結(jié)構(gòu)化存儲在復(fù)合文件中;CSocketFile 類是在進(jìn)行Socket編程時(shí),將需要序列化的數(shù)據(jù)傳給對方;CStdioFile類允許用戶對回車或換行結(jié)束的字符串進(jìn)行讀寫。
窗口類(CWnd)是Windows系統(tǒng)的數(shù)據(jù)結(jié)構(gòu),提供了MFC中所有窗口類的基本功能,是所有窗口類的基類。CWnd類結(jié)構(gòu)如圖2所示,主要有:框架窗口類(Frame Windows)、控件類(Controls)、對話框類(Dialog Boxes)、視圖類(Views)、控制欄類(Control Bars)和窗體分割類(Property Sheets)等。框架窗口類用來顯示和監(jiān)督用戶對應(yīng)用程序的命令;控件類封裝了通用控件的功能;對話框類封裝了用來創(chuàng)建對話框的Windows API,在創(chuàng)建時(shí)可以用對話框模版來填充;視圖類用來顯示用戶對應(yīng)用程序操作的結(jié)果;控制欄類用來創(chuàng)建工具欄和狀態(tài)欄類;窗體分割類,即CSplitterWnd類,支持分割窗口,允許文檔建立視圖類實(shí)例。
MFC支持的數(shù)據(jù)庫有兩類:ODBC和Microsoft Jet(也稱為Microsoft Access )。其中ODBC支持的數(shù)據(jù)庫平臺較為廣泛,包括Oracle、Sybase、Informix及Microsoft SQL Server等數(shù)據(jù)庫平臺。Microsoft Jet數(shù)據(jù)庫允許使用內(nèi)置其中的Data Access Objects(DAO)對象模型。DAO為處理數(shù)據(jù)庫表和查詢及管理用戶(用戶組)的安全性能提供了豐富的模型。表1列出了支持ODBC和Microsoft Jet的數(shù)據(jù)庫類用途。
3 實(shí)例分析
MFC支持的應(yīng)用程序有三種,即單文檔界面應(yīng)用程序(SDI)、多文檔界面應(yīng)用程序(MDI)和基于對話框應(yīng)用程序,本文以單文檔應(yīng)用程序?yàn)槔齺黻U述MFC程序的編寫原理。下面將建立一個(gè)單文檔應(yīng)用程序下,在視圖客戶區(qū)顯示“歡迎使用MFC編程!”具體步驟如下:
利用AppWizard新建一個(gè)項(xiàng)目名為“MFC單文檔應(yīng)用程序”的單文檔應(yīng)用程序,首先單擊“文件”→“新建”菜單命令,并在“文件”選項(xiàng)卡中選擇”MFC AppWizard [exe]”選項(xiàng),在”位置[C]”欄中選擇項(xiàng)目即將保存的地址,”工程名稱[N]”欄中輸入項(xiàng)目的名稱“MFC單文檔應(yīng)用程序”,然后單擊”確定”按鈕進(jìn)入下一步。在對話框中選擇“單文檔[S]”,單擊”完成”按鈕,最后在確認(rèn)對話框中單擊”確定”按鈕,至此,就新建了名為“MFC單文檔應(yīng)用程序”的單文檔界面應(yīng)用程序。
然后添加文檔類變量:在CMFCDoc類中添加public CString類型的str變量作為程序在客戶區(qū)的輸出變量,并重新編寫void CMFCView::OnDraw(CDC* pDC)函數(shù)代碼,代碼如下:
void CMFCView::OnDraw(CDC* pDC)
{
CMFCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDoc->str.Format(\"歡迎使用MFC編程!\");
pDC->TextOut(200,200,pDoc->str);
}
進(jìn)行編譯執(zhí)行后,出現(xiàn)的單文檔應(yīng)用程序如圖3所示。
4 總結(jié)
本文從MFC的設(shè)計(jì)目標(biāo)出發(fā)、介紹了MFC的優(yōu)缺點(diǎn),從文件類、窗口類及數(shù)據(jù)庫支持等三個(gè)方面著重闡述了MFC的框架,并通過編寫MFC單文檔應(yīng)用程序?qū)嵗f明了MFC程序設(shè)計(jì)的原理。
注釋
① 范志先,孫殿柱,李延瑞,孫肖霞.采用MFC開發(fā)用戶交互界面的新方法[J].工程圖學(xué)學(xué)報(bào),2008(4):160-163.
② 王恒,寧汝新,張旭,王鐵.利用MFC二次開發(fā)Pro/E[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2004(6):869-872.
③⑦趙韓,張冰戰(zhàn),朱可.UG二次開發(fā)CAD系統(tǒng)MFC的調(diào)用方法研究[J].現(xiàn)代制造工程,2007(2):88-90.
④ 諶祖輝,侯忠濱,吳占陽.UG軟件二次開發(fā)中MFC調(diào)用方法研究[J].機(jī)床與液壓,2006(2):181-186.
⑤ 鄭戰(zhàn)光,潘淑琴,夏薇,苑明海.利用MFC進(jìn)行UG二次開發(fā)的研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2007(23):5787-5791.
⑥ 羅火靈,許永忠,陳世仲.基于VTK和MFC的醫(yī)學(xué)圖像三維重建研究與實(shí)現(xiàn)[J].生物工程學(xué)進(jìn)展,2010.31(1):23-28.