Microsoft Foundation Class

Microsoft Foundation Class

MFC(Microsoft Foundation Classes),是一個微軟公司提供的類庫(class libraries),以C++類的形式封裝了Windows的API,並且包含一個應用程式框架,以減少應用程式開發人員的工作量。其中包含的類包含大量Windows句柄封裝類和很多Windows的內建控制項和組件的封裝類。

介紹,特點,重要的MFC,相關,數據類型,特有的數據類型,版本更新,編程優勢,相關書籍,物業套用,

介紹

MFC,微軟基礎類(Microsoft Foundation Classes),同VCL類似,是一種Application Framework,隨微軟Visual C++開發工具發布。目前最新版本為9.0(截止2008年11月)。該類庫提供一組通用的可重用的類庫供開發人員使用。大部分類均從CObject 直接或間接派生,只有少部分類例外。
MFC 應用程式的總體結構通常由開發人員從MFC類派生的幾個類和一個CWinApp類對象應用程式對象)組成。MFC 提供了MFC AppWizard 自動生成框架。
Windows 應用程式中,MFC 的主包含檔案為"Afxwin.h"。
此外MFC的部分類為MFC/ATL 通用,可以在Win32 應用程式中單獨包含並使用這些類。
由於它的易用性,初學者常誤認為VC++開發必須使用MFC。這種想法是錯誤的。作為Application Framework,MFC的使用只能提高某些情況下的開發效率,只起到輔助作用,而不能替代整個Win32 程式設計。

特點

MFC,微軟基礎類(Microsoft Foundation Classes),實際上是微軟提供的,用於在C++環境下編寫應用程式的一個框架和引擎,VC++Windows下開發人員使用的專業C++ SDK(SDK,Standard SoftWare Develop Kit,專業軟體開發平台),MFC就是掛在它之上的一個輔助軟體開發包,MFC作為與VC++血肉相連的部分(注意C++和VC++的區別:C++是一種程式設計語言,是一種大家都承認的軟體編制的通用規範,而VC++只是一個編譯器,或者說是一種編譯器+源程式編輯器的IDE,WS,PlatForm,這跟PascalDelphi的關係一個道理,Pascal是Delphi的語言基礎,Delphi使用Pascal規範來進行Win下應用程式的開發和編譯,卻不同於Basic語言和VB的關係,Basic語言在VB開發出來被套用的年代已經成了Basic語言的新規範,VB新加的Basic語言要素,如面向對象程式設計的要素,是一種性質上的飛躍,使VB既是一個IDE,又成長成一個新的程式設計語言),MFC同BC++集成的VCL一樣是一個非外掛式的軟體包,類庫,只不過MFC類是微軟為VC++專配的..
MFC是Win API與C++的結合,API,即微軟提供的Windows下應用程式程式語言接口,是一種軟體編程的規範,但不是一種程式開發語言本身,可以允許用戶使用各種各樣的第三方(如我是一方,微軟是一方,Borland就是第三方)的程式語言來進行對Windows下應用程式的開發,使這些被開發出來的應用程式能在Windows下運行,比如VB,VC++,Java,Delhpi程式語言函式本質上全部源於API,因此用它們開發出來的應用程式都能工作在Windows的訊息機制和繪圖里,遵守Windows作為一個作業系統的內部實現,這其實也是一種必要,微軟如果不提供API,這個世上對Windows編程的工作就不會存在,微軟的產品就會迅速從時尚變成垃圾,上面說到MFC是微軟對API函式的專用C++封裝,這種結合一方面讓用戶使用微軟的專業C++ SDK來進行Windows下應用程式的開發變得容易,因為MFC是對API的封裝,微軟做了大量的工作,隱藏了好多程式開發人員在Windows下用C++ & MFC編制軟體時的大量內節,如應用程式實現訊息的處理,設備環境繪圖,這種結合是以方便為目的的,必定要付出一定代價(這是微軟的一向作風),因此就造成了MFC對類封裝中的一定程度的的冗餘和迂迴,但這是可以接受的..
最後要明白MFC不只是一個功能單純的界面開發系統,它提供的類絕大部分用來進行界面開發,關聯一個視窗的動作,但它提供的類中有好多類不與一個視窗關聯,即類的作用不是一個界面類,不實現對一個視窗對象的控制(如創建,銷毀),而是一些在Windows(用MFC編寫的程式絕大部分都在Windows中運行)中實現內部處理的類,如資料庫的管理類等,學習中最應花費時間的是訊息和設備環境,對C++和MFC的學習中最難的部分是指針,C++面向對像程式設計的其它部分,如數據類型,流程控制都不難,建議學習數據結構C++版。
MFC是微軟封裝了的API。什麼意思呢?windows作為一個提供功能強大的應用程式接口編程的作業系統,的確方便了許多程式設計師,傳統的win32開發(直接使用windows的接口函式API)對於程式設計師來說非常的困難,因為,API函式實在太多了,而且名稱很亂,從零構架一個視窗動輒就是上百行的代碼。MFC是面向對象程式設計與Application framework的完美結合,他將傳統的API進行了分類封裝,並且為你創建了程式的一般框架,
MFC是對WindowsAPI的封裝,大大簡化了我們的工作;學VC主要就是要學MFC,大約有100多個類,但常用的也就二三十個。應該象背4級單詞一樣將這些常用類搞懂;當然不要死記,要通過看幫助、看例子、動手練習來學會它們;而且,並非每個類的內部的所有函式都要學會,要日積月累。如果真的想成為高手,做個筆記本把自己認為重要的類、函式記下來,隨時學習,也是很好的突擊方法。

重要的MFC

CWnd:視窗,它是大多數“看得見的東西”的父類(Windows里幾乎所有看得見的東西都是一個視窗,大視窗里有許多小視窗),比如視圖CView、框架視窗CFrameWnd、工具條CToolBar、對話框CDialog、按鈕CButton,etc;一個例外是選單(CMenu)不是從視窗派生的。該類很大,一開始也不必學,知道就行了。
CDocument文檔,負責記憶體數據與磁碟的互動。最重要的是OnOpenDocument(讀入),OnSaveDocument(寫盤),Serialize(讀寫)
CView視圖,負責記憶體數據與用戶的互動。包括數據的顯示、用戶操作的回響(如選單的選取、滑鼠的回響)。最重要的是OnDraw(重畫視窗),通常用CWnd::Invalidate()來啟動它。另外,它通過訊息映射表處理選單、工具條、快捷鍵和其他用戶訊息。你自己的許多功能都要加在裡面,你打交道最多的就是它。
CDC設備文本。無論是顯示器還是印表機,都是畫圖給用戶看。這圖就抽象為CDC。CDC與其他GDI(圖形設備接口)一起,完成文字和圖形、圖像的顯示工作。把CDC想像成一張紙,每個視窗都有一個CDC相聯繫,負責畫視窗。CDC有個常用子類CClientDC(視窗客戶區),畫圖通常通過CClientDC完成。
CDialog對話框
CWinApp應用程式類。似於C中的main函式,是程式執行的入口和管理者,負責程式建立、消滅,主視窗和文檔模板的建立。最常用函式InitInstance():初始化。
CGdiObject及子類,用於向設備文本畫圖。它們都需要在使用前選進DC。
CPen筆,畫線
CBrush刷子,填充
CFont字型,控制文字輸出的字型
CBitmap點陣圖
CPalette調色板
CRgn區域,指定一塊區域可以用於做特殊處理。
CFile檔案。最重要的不外是Open(打開),Read(讀入),Write(寫)
CString字元串。封裝了C中的字元數組,非常實用。
CPoint點,就是(x,y)對
CRect矩形,就是(left,top,right,bottom)
CSize大小,就是(cx,cy)對(寬、高)MFC是在1992年的Microsoft 16位版的C/C++編譯器的7.0版本中作為一個擴展輕量級的Windows API面向對象的C++封裝庫而引入的。此時,C++因為它在和API方面的卓越表現,剛剛開始被用來取代C套用於開發商用軟體。因此,他們推出了替代早期的老式的字元界面集成開發環境(IDE)的PWB。

相關

有趣的是,MFC使用“Afx”作為所有的全局函式的前綴,“afx”作為全局變數的前綴。因為在MFC的早期開發階段它叫“Application Framework Extensions”縮寫為“AFX”。AFX提供了對Windows API的高度抽象,建立了全新的面向對象的AFX API,但它對於新手來說太複雜了,所以AFX小組不得不重新開始。後來他們創建了一組C++類,這就是MFC。MFC這個名字被採用得太晚了以至於沒來得及修改這些引用。
最近,MFC8.0和Visual Studio 2005一起發布了;MFC9.0和Visual Studio 2008一起發布。在免費的Express版本的Visual Studio 2005/2008中沒有包含MFC。
作為一個強有力的競爭對手,為Borland的Turbo C++編譯器設計OWL(Object Windows Library)在同一時間也發布了。但最後,Borland停止了對OWL的繼續開發並且不久就從Microsoft那裡購買了MFC頭檔案,動態程式庫等的授權,微軟沒有提供完整的MFC的集成支持。之後Borland發布了VCL(Visual Component Library)來替換OWL框架。

數據類型

BOOL
Boolean值(TRUE或FALSE)
BSTR
32-bit字元指針
BYTE
8-bit整數,無符號
COLORREF
32-bit數值,代表顏色值
DWORD
32-bit整數,無符號
LONG
32-bit整數,有符號
LPARAM
32-bit數值,作為視窗函式或callback的參數
LPCSTR
32-bit指針,指向一個常數字元串
LPSTR
32-bit指針,指向一個字元串
LPCTSTR
32-bit指針,指向一個常數字元串,此字元串可以移植到Unicode和DBCS(雙位元組字集)
LPTSTR
32-bit指針,指向一個字元串,此字元串可以移植到Unicode和DBCS(雙位元組字集)
LPVOID
32-bit指針,指向一個未指定類型的數據
LPRESULT
32-bit數值,作為視窗函式或callback的返回值
UINT
Unsigned int
WNDPROC
32-bit指針,指向一個視窗函式
WORD
16-bit整數,無符號
WPARAM
視窗函式或callback的一個參數

特有的數據類型

POSITION
一個數值,代表collection對象中的元素位置,常用於MFC collection classes
LPCRECT
32-bit指針,指向一個不變的RECT結構

版本更新

新產品版本 MFC版本
Microsoft C/C++ 7.0 MFC 1.0
Visual C++ 1.0 MFC 2.0
Visual C++ 1.5 MFC 2.5
Visual C++ 2.0 MFC 3.0
Visual C++ 2.1 MFC 3.1
Visual C++ 2.2 MFC 3.2
Visual C++ 4.0 MFC 4.0 (mfc40.dllincluded with Windows 95)
Visual C++ 4.1 MFC 4.1
Visual C++ 4.2 MFC 4.2 (mfc42.dllincluded with the Windows 98 original release)
eMbedded Visual C++ 3.0 MFC 4.2 (mfc42.dll)
Visual C++ 5.0 MFC 4.21 (mfc42.dll)
Visual C++ 6.0 MFC 6.0 (mfc42.dll)
eMbedded Visual C++ 4.0 none
Visual C++ .NET 2002 MFC 7.0 (mfc70.dll)
Visual C++ .NET 2003 MFC 7.1 (mfc71.dll)
Visual C++ 2005 MFC 8.0 (mfc80.dll)
Visual C++ 2008 MFC 9.0.21022 (mfc90.dll)
Visual C++ 2008 with Feature Pack MFC 9.0.30411 (mfc90.dll)

編程優勢

隨著程式語言的推陳出新,MFC一些缺點日益突出。最重要的就是入門門檻相對其他語言要高,而且同樣完成一個任務代碼量相對較多。而原有的優勢如運行速度快等,也因為其他程式語言的日臻完善和個人電腦的運算速度增加而顯得不那么突出。MFC似乎江河日下。
但是MFC真的沒有任何優勢了嗎?不是,面對底層程式,它能很輕鬆的與Windows API或驅動程式結合,就是在自己的代碼中直接使用API函式,而API和驅動程式的資料都是以C語言為基礎的,這使得VC程式設計師能夠更輕鬆的使用Windows API。這樣造成了一個很有意思的現象,即入門時VC程式設計師要付出更多的努力來學習,但是一旦掌握後,開發其他領域的程式或使用第三方軟體時,如工業控制類的程式,由於底層的程式都是用C語言編寫,反倒是VC程式設計師能夠更快的掌握該領域的編程技術。而很多其他的程式語言甚至找不到相關的資料。這就說明VC(MFC)實際上是一種入門困難,但是擴展學習卻很輕鬆的語言框架。如果既限於某一領域的話VC毫無優勢可言,但是如果開發一個新的領域的應用程式或者該程式涉及多個套用領域的話,可減少重複學習的頻率和難度,VC(MFC)的優勢會立刻顯現出來。

相關書籍

MFC的一些重要書籍
(1)侯俊傑, 《深入淺出MFC》
(2)孫鑫.《VC++從入門到精通》
(3)Ivor Horton著 李頌華 康會光 譯《Visual C++ 2005 入門經典》

物業套用

(1)物業管理信息應包括:
小區資料(小區名稱,樓宇總數等),房型資料(房型編號、房型、建築面積等),住戶資料(住戶編號、住戶姓名、聯繫電話、聯繫地址、預付金額、欠費金額等),住戶報修管理,住戶投訴管理,住戶停車車位管理(車位編號,住戶信息等),住戶物業收費管理(收費名稱、收費金額、收費單位、收費周期等)等。
(2)需要實現的功能
1) 用戶需要輸入口令進入物業管理系統
2) 實現物業管理信息的建立
3) 計算小區的房型種類,查詢住戶的欠費狀況
4) 顯示住戶投訴報表
5) 按照欠費金額進行排序,顯示用戶相關信息
6) 查找住戶的車位信息
7) 將小區的所有相關信息內容存為檔案。
(3)界面友好,輸入信息符合邏輯如收費周期應至少以月為單位

相關詞條

熱門詞條

聯絡我們