簡單說: C++是純粹的編程語言;VC++是編程環(huán)境,即平常所說的IDE;MFC是隨微軟VC++ 開發(fā)工具發(fā)布的類庫。 詳細(xì)說: MFC,微軟基礎(chǔ)類(Microsoft Foundation Classes),實(shí)際上是微軟提供的用于在C++環(huán)境下編寫應(yīng)用程序的一個(gè)框架和引擎;VC++是WinDOS下開發(fā)人員使用的專業(yè)C++ SDK(SDK,Standard SoftWare Develop Kit,專業(yè)軟件開發(fā)平臺(tái)),MFC就是掛在它之上的一個(gè)輔助軟件開發(fā)包。MFC作為與VC++血肉相連的部分(注意C++和VC++的區(qū)別:C++是一種程序設(shè)計(jì)語言,是一種大家都承認(rèn)的軟件編制的通用規(guī)范,而VC++只是一個(gè)編譯器,或者說是一種“編譯器 +源程序編輯器”的IDE,這跟Pascal和Delphi的關(guān)系是一個(gè)道理:Pascal是Delphi的語言基礎(chǔ),Delphi使用Pascal規(guī)范來進(jìn)行Win下應(yīng)用程序的開發(fā)和編譯。但不同于Basic語言和VB的關(guān)系:Basic語言在VB開發(fā)出來被應(yīng)用的年代已經(jīng)成了Basic語言的新規(guī)范,VB新加的Basic語言要素,如面向?qū)ο蟪绦蛟O(shè)計(jì)的要素,是一種性質(zhì)上的飛躍,使VB既是一個(gè)IDE,又成長成一個(gè)新的程序設(shè)計(jì)語言),MFC同Borland C++集成的VCL一樣,是一個(gè)非外掛式的軟件包、類庫,只不過MFC類是微軟為VC++專配的罷了。 MFC是Win API與C++的結(jié)合。API,即微軟提供的WinDOS下應(yīng)用程序的編程語言接口,是一種軟件編程的規(guī)范,但本身不是一種程序開發(fā)語言,可以允許用戶使用各種各樣的第三方(如我是一方,微軟是一方,Borland就是第三方)的編程語言來進(jìn)行對WinDOS下應(yīng)用程序的開發(fā),使這些被開發(fā)出來的應(yīng)用程序能在WinDOS下運(yùn)行。比如VB,VC++,Java,Dehpi編程語言函數(shù)本質(zhì)上全部源于API,因此用它們開發(fā)出來的應(yīng)用程序都能工作在WinOS的消息機(jī)制和繪圖里,遵守WinDOS作為一個(gè)操作系統(tǒng)的內(nèi)部實(shí)現(xiàn)。這其實(shí)也是一種必要,微軟如果不提供API,這個(gè)世上對Win編程的工作就不會(huì)存在,微軟的產(chǎn)品就會(huì)迅速從時(shí)尚變成垃圾,上面說到MFC是微軟對API函數(shù)的專用C++封裝,這種結(jié)合一方面讓用戶使用微軟的專業(yè)C++ SDK來進(jìn)行Win下應(yīng)用程序的開發(fā)變得容易,因?yàn)镸FC是對API的封裝,微軟做了大量的工作,隱藏了好多程序開發(fā)人員在Win下用C++ & MFC編制軟件時(shí)的大量內(nèi)節(jié),如應(yīng)用程序?qū)崿F(xiàn)消息的處理,設(shè)備環(huán)境繪圖,這種結(jié)合是以方便為目的的,必定要付出一定代價(jià)(這是微軟的一向作風(fēng)),因此就造成了MFC對類封裝中的一定程度的的冗余和迂回,但這是可以接受的。 最后要明白MFC不只是一個(gè)功能單純的界面開發(fā)系統(tǒng)。它提供的類絕大部分用來進(jìn)行界面開發(fā),關(guān)聯(lián)一個(gè)窗口的動(dòng)作,但它提供的類中有好多類不與一個(gè)窗口關(guān)聯(lián),即類的作用不是一個(gè)界面類,不實(shí)現(xiàn)對一個(gè)窗口對象的控制(如創(chuàng)建、銷毀),而是一些在WinDOS(用MFC編寫的程序絕大部分都在WinDOS中運(yùn)行)中實(shí)現(xiàn)內(nèi)部處理的類,如數(shù)據(jù)庫的管理類等。學(xué)習(xí)中最應(yīng)花費(fèi)時(shí)間的是消息和設(shè)備環(huán)境,對C++和MFC的學(xué)習(xí)中最難的部分是指針,C++面向?qū)ο癯绦蛟O(shè)計(jì)的其它部分,如數(shù)據(jù)類型、流程控制都不難。建議學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)C++版。 MFC是微軟封裝了的API。什么意思呢?windows作為一個(gè)提供功能強(qiáng)大的應(yīng)用程序接口編程的操作系統(tǒng),的確方便了許多程序員,傳統(tǒng)的win32開發(fā)(直接使用windows的接口函數(shù)API)對于程序員來說非常的困難,因?yàn)椋珹PI函數(shù)實(shí)在太多了,而且名稱很亂,從零構(gòu)架一個(gè)窗口動(dòng)輒就是上百行的代碼。MFC是面向?qū)ο蟪绦蛟O(shè)計(jì)與Application framework的完美結(jié)合,他將傳統(tǒng)的API進(jìn)行了分類封裝,并且為你創(chuàng)建了程序的一般框架。MFC是對WindowsAPI的封裝,大大簡化了我們的工作;學(xué)VC主要就是要學(xué)MFC,大約有100多個(gè)類,但常用的也就二三十個(gè)。應(yīng)該象背4級(jí)單詞一樣將這些常用類搞懂;當(dāng)然不要死記,要通過看幫助、看例子、動(dòng)手練習(xí)來學(xué)會(huì)它們;而且,并非每個(gè)類的內(nèi)部的所有函數(shù)都要學(xué)會(huì),要日積月累。如果真的想成為高手,做個(gè)筆記本把自己認(rèn)為重要的類、函數(shù)記下來,隨時(shí)學(xué)習(xí),也是很好的突擊方法。 有趣的是,MFC使用“Afx”作為所有的全局函數(shù)的前綴,“afx”作為全局變量的前綴。因?yàn)樵贛FC的早期開發(fā)階段它叫“Application Framework Extensions”縮寫為“AFX”。AFX提供了對Windows API的高度抽象,建立了全新的面向?qū)ο蟮腁FX API,但它對于新手來說太復(fù)雜了,所以AFX小組不得不重新開始。后來他們創(chuàng)建了一組C++類,這就是MFC。MFC這個(gè)名字被采用得太晚了以至于沒來得及修改這些引用。
重要的MFC CWnd:窗口,它是大多數(shù)“看得見的東西”的父類(Windows里幾乎所有看得見的東西都是一個(gè)窗口,大窗口里有許多小窗口),比如視圖CView、框架窗口CFrameWnd、工具條CToolBar、對話框CDialog、按鈕CButton,etc;一個(gè)例外是菜單(CMenu)不是從窗口派生的。該類很大,一開始也不必學(xué),知道就行了。 CDocument文檔,負(fù)責(zé)內(nèi)存數(shù)據(jù)與磁盤的交互。最重要的是OnOpenDocument(讀入),OnSaveDocument(寫盤),Serialize(讀寫) CView視圖,負(fù)責(zé)內(nèi)存數(shù)據(jù)與用戶的交互。包括數(shù)據(jù)的顯示、用戶操作的響應(yīng)(如菜單的選取、鼠標(biāo)的響應(yīng))。最重要的是OnDraw(重畫窗口),通常用CWnd::Invalidate()來啟動(dòng)它。另外,它通過消息映射表處理菜單、工具條、快捷鍵和其他用戶消息。你自己的許多功能都要加在里面,你打交道最多的就是它。 CDC設(shè)備文本。無論是顯示器還是打印機(jī),都是畫圖給用戶看。這圖就抽象為CDC。CDC與其他GDI(圖形設(shè)備接口)一起,完成文字和圖形、圖像的顯示工作。把CDC想象成一張紙,每個(gè)窗口都有一個(gè)CDC相聯(lián)系,負(fù)責(zé)畫窗口。CDC有個(gè)常用子類CClientDC(窗口客戶區(qū)),畫圖通常通過CClientDC完成。 CDialog對話框 CWinApp應(yīng)用程序類。似于C中的main函數(shù),是程序執(zhí)行的入口和管理者,負(fù)責(zé)程序建立、消滅,主窗口和文檔模板的建立。最常用函數(shù)InitInstance():初始化。 CGdiObject及子類,用于向設(shè)備文本畫圖。它們都需要在使用前選進(jìn)DC。 CPen筆,畫線 CBrush刷子,填充 CFont字體,控制文字輸出的字體 CBitmap位圖 CPalette調(diào)色板 CRgn區(qū)域,指定一塊區(qū)域可以用于做特殊處理。 CFile文件。最重要的不外是Open(打開),Read(讀入),Write(寫) CString字符串。封裝了C中的字符數(shù)組,非常實(shí)用。 CPoint點(diǎn),就是(x,y)對 CRect矩形,就是(left,top,right,bottom) CSize大小,就是(cx,cy)對(寬、高)MFC是在1992年的Microsoft 16位版的C/C++編譯器的7.0版本中作為一個(gè)擴(kuò)展輕量級(jí)的Windows API面向?qū)ο蟮腃++封裝庫而引入的。此時(shí),C++因?yàn)樗诤虯PI方面的卓越表現(xiàn),剛剛開始被用來取代C應(yīng)用于開發(fā)商用軟件。因此,他們推出了替代早期的老式的字符界面的集成開發(fā)環(huán)境(IDE)的PWB。
|