介紹
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,這跟
Pascal和
Delphi的關係一個道理,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刷子,填充
CBitmap點陣圖
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++ 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)需要實現的功能
2) 實現物業管理信息的建立
3) 計算小區的房型種類,查詢住戶的欠費狀況
4) 顯示住戶投訴報表
5) 按照欠費金額進行排序,顯示用戶相關信息
6) 查找住戶的車位信息
7) 將小區的所有相關信息內容存為檔案。
(3)
界面友好,輸入信息符合邏輯如收費周期應至少以月為單位