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。