簡單介紹
MFC實際上是微軟所提供的微軟基礎類(MicrosoftFoundationClasses),這個類作用在C++環境下編寫應用程序的一個框架和引擎。而MFC就是在VC++上的輔助軟件開發包(VC++是WinOS下開發人員使用的專業C++SDK)。要注意的是MFC同VC++集成的VCL一樣是一個非外挂式的軟件包,類庫,隻不過MFC類是微軟為VC++專配的。本文會對MFC進行簡單的了解以及MFC的優缺點。
關鍵技術
MFC程序的初始化過程
建立一個MFC窗口很容易,隻用兩步:一是從CWinApp派生一個應用程序類(這裡是MyApp),然後建立應用程序對象(theApp),就可以産生一個自己需要的窗口(即需要什麼樣就在InitInstance()裡創建就行了)。
運行時類型識别
運行時類型識别(RTTI)即是程序執行過程中知道某個對象屬于某個類,我們平時用C++編程接觸的RTTI一般是編譯器的RTTI,即是在新版本的VC++編譯器裡面選用“使能RTTI”,然後載入typeinfo.h文件,就可以使用一個叫typeid()的運算子,它的地位與在C++編程中的sizeof()運算子類似的地方(包含一個頭文件,然後就有一個熟悉好用的函數)。typeid()關鍵的地方是可以接受兩個類型的參數:一個是類名稱,一個是對象指針。
永久保存
MFC的連續存儲(serialize)機制俗稱串行化。“在你的程序中盡管有着各種各樣的數據,serialize機制會象流水一樣按順序存儲到單一的文件中,而又能按順序地取出,變成各種不同的對象數據。”不知我在說上面這一句話的時候,大家有什麼反應,可能很多朋友直覺是一件很簡單的事情,隻是說了一個“爽”字就沒有下文了。
MFC擴展DLL
每個DLL都有某種類型的接口:變量、指針、函數、客戶程序訪問的類。它們的作用是讓客戶程序使用DLL,MFC擴展DLL可以有C++的接口。也就是它可以導出C++類給客戶端。導出的函數可以使用C++/MFC數據類型做參數或返回值,導出一個類時客戶端能創建類對象或者派生這個類。同時,在DLL中也可以使用DLL和MFC。
VisualC++使用的MFC類庫也是保存在一個DLL中,MFC擴展DLL動态連接到MFC代碼庫的DLL,客戶程序也必須要動态連接到MFC代碼庫的DLL。(這裡談到的兩個DLL,一個是我們自己編寫的DLL,一個裝MFC類庫的DLL)現在MFC代碼庫的DLL也存在多個版本,客戶程序和擴展DLL都必須使用相同版本的MFC代碼DLL。所以為了讓MFC擴展DLL能很好的工作,擴展DLL和客戶程序都必須動态連接到MFC代碼庫DLL。而這個DLL必須在客戶程序運行的計算機上。
編程優勢
随着編程語言的推陳出新,MFC一些缺點日益突出。最重要的就是入門門檻相對其他語言要高,而且同樣完成一個任務代碼量相對較多。而原有的優勢如運行速度快等,也因為其他編程語言的日臻完善和個人電腦的運算速度增加而顯得不那麼突出。MFC似乎江河日下。
但是MFC真的沒有任何優勢了嗎?不是,面對底層程序,它能很輕松的與WindowsAPI或驅動程序結合,就是在自己的代碼中直接使用API函數,而API和驅動程序的資料都是以C語言為基礎的,這使得VC程序員能夠更輕松的使用WindowsAPI。這樣造成了一個很有意思的現象,即入門時VC程序員要付出更多的努力來學習,但是一旦掌握後,開發其他領域的程序或使用第三方軟件時,如工業控制類的程序,由于底層的程序都是用C語言編寫,反倒是VC程序員能夠更快的掌握該領域的編程技術。而很多其他的編程語言甚至找不到相關的資料。這就說明VC(MFC)實際上是一種入門困難,但是擴展學習卻很輕松的語言框架。如果局限于某一領域的話VC毫無優勢可言,但是如果開發一個新的領域的應用程序或者該程序涉及多個應用領域的話,可減少重複學習的頻率和難度,VC(MFC)的優勢會立刻顯現出來。



















