摘 要 MFC由于其優秀的特性和體系結構被廣泛應用。介紹了MFC的設計目標及優缺點,從文件類、窗口類及數據庫支持等三個方面重點闡述了MFC的層次結構,通過編寫名為“MFC單文檔應用程序”的單文檔應用程序說明了MFC的設計原理。
關鍵詞 微軟基本類庫 層次設計 文件類 窗口類
中圖分類號:TP311 文獻標識碼: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)是由微軟公司推出的基于面向對象的可視化集成編程系統,由于VC強大的自動編譯功能、高級除錯功能和“語法高亮”功能,被廣泛應用于各類軟件中。封裝Win32 API 函數的基本類庫(Microsoft Foundation Class Library,簡稱MFC)提供了圖形環境下應用程序的框架及創建應用程序的組件,通過Wizard功能簡化了Windows應用程序的編寫工作。MFC提供了大量基類和可重用類庫供用戶使用,并允許用戶根據不同應用環境進行擴充和自定義。大多數MFC是從CObject基類派生的,可以在運行時獲得對象大小和名字。
MFC被廣泛應用于用戶交互界面的開發、①Pro/E二次開發、②UG的二次開發③④⑤、生物醫學圖像處理⑥等方面,本文從MFC的設計目標及優缺點出發,闡述MFC的層次設計,并通過實例介紹MFC的編程原理。
1 MFC的設計目標及優缺點
1.1 MFC的設計目標
MFC主要有兩個設計目標:一是為Windows操作系統提供一個面向對象的接口。此目標通過編寫類來封裝窗口、對話框及其他對象,并引入適當的虛函數來完成。二是在不需強加系統過多工作和不增加應用程序對內存不必要開銷的前提下,支持可重用、自包含性及其它面向對象程序設計(OOP)原則。⑦該目標要求用戶盡早選擇MFC窗口、菜單及其他對象的封裝方法。
1.2 MFC的優缺點
MFC在特性和體系結構上有很多優點:MFC包含文檔/視圖體系結構、多文檔界面(MDI)、打印支持、Active X空間支持、數據庫支持、網絡支持、Windows系統常用控件支持和多線程支持等。MFC不僅利用C++語言特性從框架類中派生自定義類,節約用戶的時間和精力,而且MFC的分層設計使得用戶可以根據需要擴展框架。同時,MFC的缺點也相當明顯:MFC編程較為繁瑣,程序入口較為復雜,函數名多,函數及其用法不易掌握。
2 MFC的層次設計
與目錄結構類似,MFC對象層次包含一個根對象CObject,其它大多數對象是由此根對象派生而來,如處理命令消息的CCmdTarget類及其派生類、控制窗口的CWnd類及其派生類。下面分別從文件類、窗口類及數據庫支持來介紹MFC的層次。
文件類CFile包含很多C++類中的Windows API調用,標準I/O文件使用fgets()和fputs()函數進行輸入和輸出,為了實現文檔格式的轉換,采用串行化將數據類成員變量按順序存儲到磁盤。文件類結構如圖1所示,主要包含四個子類:CMemFile類允許用戶在內存中創建文件;COleStreamFile表示數據流作為OLE結構化存儲在復合文件中;CSocketFile 類是在進行Socket編程時,將需要序列化的數據傳給對方;CStdioFile類允許用戶對回車或換行結束的字符串進行讀寫。
窗口類(CWnd)是Windows系統的數據結構,提供了MFC中所有窗口類的基本功能,是所有窗口類的基類。CWnd類結構如圖2所示,主要有:框架窗口類(Frame Windows)、控件類(Controls)、對話框類(Dialog Boxes)、視圖類(Views)、控制欄類(Control Bars)和窗體分割類(Property Sheets)等。框架窗口類用來顯示和監督用戶對應用程序的命令;控件類封裝了通用控件的功能;對話框類封裝了用來創建對話框的Windows API,在創建時可以用對話框模版來填充;視圖類用來顯示用戶對應用程序操作的結果;控制欄類用來創建工具欄和狀態欄類;窗體分割類,即CSplitterWnd類,支持分割窗口,允許文檔建立視圖類實例。
MFC支持的數據庫有兩類:ODBC和Microsoft Jet(也稱為Microsoft Access )。其中ODBC支持的數據庫平臺較為廣泛,包括Oracle、Sybase、Informix及Microsoft SQL Server等數據庫平臺。Microsoft Jet數據庫允許使用內置其中的Data Access Objects(DAO)對象模型。DAO為處理數據庫表和查詢及管理用戶(用戶組)的安全性能提供了豐富的模型。表1列出了支持ODBC和Microsoft Jet的數據庫類用途。
3 實例分析
MFC支持的應用程序有三種,即單文檔界面應用程序(SDI)、多文檔界面應用程序(MDI)和基于對話框應用程序,本文以單文檔應用程序為例來闡述MFC程序的編寫原理。下面將建立一個單文檔應用程序下,在視圖客戶區顯示“歡迎使用MFC編程!”具體步驟如下:
利用AppWizard新建一個項目名為“MFC單文檔應用程序”的單文檔應用程序,首先單擊“文件”→“新建”菜單命令,并在“文件”選項卡中選擇”MFC AppWizard [exe]”選項,在”位置[C]”欄中選擇項目即將保存的地址,”工程名稱[N]”欄中輸入項目的名稱“MFC單文檔應用程序”,然后單擊”確定”按鈕進入下一步。在對話框中選擇“單文檔[S]”,單擊”完成”按鈕,最后在確認對話框中單擊”確定”按鈕,至此,就新建了名為“MFC單文檔應用程序”的單文檔界面應用程序。
然后添加文檔類變量:在CMFCDoc類中添加public CString類型的str變量作為程序在客戶區的輸出變量,并重新編寫void CMFCView::OnDraw(CDC* pDC)函數代碼,代碼如下:
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);
}
進行編譯執行后,出現的單文檔應用程序如圖3所示。
4 總結
本文從MFC的設計目標出發、介紹了MFC的優缺點,從文件類、窗口類及數據庫支持等三個方面著重闡述了MFC的框架,并通過編寫MFC單文檔應用程序實例說明了MFC程序設計的原理。
注釋
① 范志先,孫殿柱,李延瑞,孫肖霞.采用MFC開發用戶交互界面的新方法[J].工程圖學學報,2008(4):160-163.
② 王恒,寧汝新,張旭,王鐵.利用MFC二次開發Pro/E[J].計算機輔助設計與圖形學學報,2004(6):869-872.
③⑦趙韓,張冰戰,朱可.UG二次開發CAD系統MFC的調用方法研究[J].現代制造工程,2007(2):88-90.
④ 諶祖輝,侯忠濱,吳占陽.UG軟件二次開發中MFC調用方法研究[J].機床與液壓,2006(2):181-186.
⑤ 鄭戰光,潘淑琴,夏薇,苑明海.利用MFC進行UG二次開發的研究[J].計算機工程與設計,2007(23):5787-5791.
⑥ 羅火靈,許永忠,陳世仲.基于VTK和MFC的醫學圖像三維重建研究與實現[J].生物工程學進展,2010.31(1):23-28.