1. 程式人生 > >C,C++,VC++,MFC之間有什麼區別和聯絡

C,C++,VC++,MFC之間有什麼區別和聯絡

C語言是一種古老而又經久不衰的計算機程式設計語言,大約誕生於上個世紀60年代。由於它的設計有很多優點,多年以來深受廣大程式設計人員的喜愛,並逐漸淘汰了很多其它程式設計語言。我們平時使用的大多數軟體都是用C語言開發的。很多後來出現的一些語言也沿用了很多它的東西。C語言的程式設計方式是一種稱為面向過程的開發方式。也就是說,解決問題的時候,程式設計師需要思考計算機應該如何一步一步完成這個問題,然後將相應過程轉化為程式碼。

當軟體變得越來越複雜,程式碼越來越長的時候,一個人的腦力有限,用面向過程的方法很難開發,往往寫著後面的,就忘了前面寫 了什麼了。而且複雜軟體往往需要很多人協同開發,更加大了開發難度。一種稱為面向物件

的軟體開發方法應運而生。面向物件的思想用幾句話很難說清楚。國內的 計算機教材在講到這裡的時候往往也都說不清楚什麼叫面向物件。這個詞語也許只能意會不能言傳吧。需要開發過一些相關軟體才能領會。這裡還是不具體說了吧。 C語言不是面向物件的,而程式設計師又離不開C語言,因此有人在C語言的基礎上添加了面向物件的功能,就是C++.同時,C++修改了C語言中一些不方便的規定,使C語言用起來更方便了。這裡需要注意:

C++是在C語言的基礎上發展來的,但是並不是C++比C語言高階,兩者的程式設計思想不一樣,應用的領域也不一樣。在各自的領域,誰也不能替代誰。而且,windows作業系統出現以後,開發windows平臺的圖形介面程式

成為一大難題。用C語言雖然能開發,但是程式設計師要花費很大的精力處理圖形介面。同時,windows平臺圖形介面的程式又都有很多相似點。為了解放程式設計師,讓他們把精力主要放在程式功能上,而不是放在圖形介面上,microsoft公司推出了visual系列軟體開發環境,包括為C++程式設計師提供的Visual C++.程式設計師能用C++語言在其上開發圖形介面的軟體。微軟隨Visual C++提供了很多用於顯示Windows介面的庫函式。可以說Visual C++就是C++加上windows圖形介面。

那是不是想學C++和C語言的話,只要去學Visual C++就行了呢?大錯特錯!市面上任何一本Visual C++教材都是假設使用者已經掌握了C++語言,重點在講和

Windows程式設計相關的東西,而且往往都要講MFC.沒有C++基礎,根本無法理解MFC 的任何東西。

很多人急功近利,覺得花費半年甚至一年時間學習C++.連個圖形介面的程式都開發不出來,太不划算。這種想法也是錯誤的。世界上的軟體只有一部分具有圖形 介面,執行在Windows平臺,需要用Visual C++開發。學好了C++,即使不學Visual C++,也是大有作為的。

還有很多人,要學C++或者C語言,先整個Visual C++裝上。其實這是一種誤區。C++是一門程式語言,而VC只是一個IDE,是一個工具。C++是與平臺無關的,VC只能在Windows跑,學習VC,更多是學Windows程式設計。我們學習應該先學程式語言,然後再具體的學習與平臺相關的東西。把東西都放在一起來學,保證亂!Visual C++操作複雜,而且幫助開發者做了很多事情。對於初學者來說,操作複雜的話要花很多時間用在掌握Visual C++的用法上。幫開發者做的那些事情,往往是初學者需要了解的,自己親手做一下,對學習更有好處。

C++、VC++、MFC這三都到底有什麼區別和聯絡呀?

  C++是純粹的程式語言;VC++是程式設計環境,即平常所說的IDE(即Integrated Development Environment,是“整合開發環境”的英文縮寫);MFC是隨微軟VC++ 開發工具宣佈的類庫。詳細說:MFC,微軟基本類(Microsoft Foundation Classes),實際上是微軟供給的用於在C++環境下編寫應用程式的一個框架和引擎;VC++是WinDOS下開發人員使用的專業C++ SDK(SDK,Standard SoftWare Develop Kit,專業軟體開發平臺),MFC就是掛在它之上的一個幫助軟體開發包。MFC作為與VC++血肉相連的部分(注意C++和VC++的區別:C++是一種程式設計語言,是一種大家都承認的軟體編制的通用規範,而VC++只是一個編譯器,或者說是一種“編譯器 +源程式編輯器”的IDE,這跟Pascal和Delphi的關係是一個道理:Pascal是Delphi的語言基本,Delphi使用Pascal規範來進行Win下應用程式的開發和編譯。但不同於Basic語言和VB的關係:Basic語言在VB開發出來被應用的年代已經成了Basic語言的新規範,VB新加的Basic語言要素,如面向物件程式設計的要素,是一種性質上的飛躍,使VB既是一個IDE,又成長成一個新的程式設計語言),MFC同Borland C++整合的VCL一樣,是一個非外掛式的軟體包、類庫,只不過MFC類是微軟為VC++專配的罷了。

 MFC是Win API與C++的結合。API,即微軟供給的WinDOS下應用程式的程式語言介面,是一種軟體程式設計的規範,但本身不是一種程式開發語言,可以允許使用者使用各種各樣的第三方(如我是一方,微軟是一方,Borland就是第三方)的程式語言來進行對WinDOS下應用程式的開發,使這些被開發出來的應用程式能在WinDOS下執行。比如VB,VC++,Java,Dehpi程式語言函式實質上全部源於API,因此用它們開發出來的應用程式都能工作在WinOS的訊息機制和繪圖裡,遵守WinDOS作為一個作業系統的內部實現。這其實也是一種必要,微軟如果不供給API,這個世上對Win程式設計的工作就不會存在,微軟的產品就會迅速從時尚變成垃圾,上面說到MFC是微軟對API函式的專用C++封裝,這種結合一方面讓使用者使用微軟的專業C++ SDK來進行Win下應用程式的開發變得容易,因為MFC是對API的封裝,微軟做了大量的工作,暗藏了好多程式開發人員在Win下用C++ & MFC編制軟體時的大量內節,如應用程式實現訊息的處理,裝置環境繪圖,這種結合是以便利為目的的,必定要付出一定代價(這是微軟的一向作風),因此就造成了MFC對類封裝中的一定程度的的冗餘和迂迴,但這是可以接受的。

  最後要明白MFC不只是一個功效單純的介面開發系統。它供給的類絕大部分用來進行介面開發,關聯一個視窗的動作,但它供給的類中有好多類不與一個視窗關聯,即類的作用不是一個介面類,不實現對一個視窗物件的把持(如建立、銷燬),而是一些在WinDOS(用MFC編寫的程式絕大部分都在WinDOS中執行)中實現內部處理的類,如資料庫的管理類等。學習中最應花費時間的是訊息和裝置環境,對C++和MFC的學習中最難的部分是指標,C++面向對像程式設計的其它部分,如資料型別、流程把持都不難。建議學習資料結構C++版。

  MFC是微軟封裝了的API。什麼意思呀?windows作為一個供給功效強大的應用程式介面程式設計的作業系統,的確便利了許多程式設計師,傳統的win32開發(直接使用windows的介面函式API)對於程式設計師來說非常的困難,因為,API函式實在太多了,而且名稱很亂,從零構架一個視窗動輒就是上百行的程式碼。MFC是面向物件程式設計與Application framework的完美結合,他將傳統的API進行了分類封裝,並且為你建立了程式的一般框架。MFC是對WindowsAPI的封裝,大大簡化了我們的工作;學VC主要就是要學MFC,大約有100多個類,但常用的也就二三十個。應該象背4級單詞一樣將這些常用類搞懂;當然不要死記,要通過看輔助、看例子、動手練習來學會它們;而且,並非每個類的內部的所有函式都要學會,要日積月累。如果真的想成為高手,做個筆記本把自己認為重要的類、函式記下來,隨時學習,也是很好的突擊方式。

  有趣的是,MFC使用“Afx”作為所有的全域性函式的字首,“afx”作為全域性變數的字首。因為在MFC的早期開發階段它叫“Application Framework Extensions”縮寫為“AFX”。AFX供給了對Windows API的高度抽象,建立了全新的面向物件的AFX API,但它對於新手來說太龐雜了,所以AFX小組不得不重新開始。後來他們建立了一組C++類,這就是MFC。MFC這個名字被採用得太晚了以至於沒來得及修改這些引用。

重要的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。