天天看點

MFC與Win32的差別

文章原址:http://blog.sina.com.cn/s/blog_7656589b01016011.html

MFC就是 微軟給你包裝了的庫,提供了很多擴充功能,以及進階功能,這樣友善你使用,而不是自己從頭調用API來實作

而API由于是MFC下一層,自然實作更靈活,可以根據你的需要來使用,不會被MFC類庫所限制。‍win32和mfc程式設計的最大不同是

win32是程式設計者自己把消息和該消息的響應函數聯系在一起。

mfc是程式設計者采用微軟為我們做好了MESSAGE_MAP(消息映射)機制,來處理消息。

--------------

mfc是便利的,為什麼有人不用呢?

不用mfc的人群往往是從DOS時代開始從事視窗程式設計的人,他們早在mfc出世之前就編得一手好程式。

長期的程式設計過程中,每人,每個TEAM都擁有了自己的消息處理機制程式庫或類庫。

當然有很多人認為他的類庫比mfc使用友善。他開始為視窗程式設計的時候,mfc的TEAM的很多人還在學校裡讀書呢。

--------------

如果不是從那個年代過來的人,還是用mfc吧!

mfc是封裝的類,最後還是會調用win32api 

win32api開發效率是低一些,但比較自由. 

有時候mfc是封裝的類不能滿足我們的要求,這時就需要我們自己用api來開發啦 ‍MFC是專注于使用者界面的,而Windows SDK專注于UI, console,Windows服務,嵌入式,驅動多種類型的程式

MFC是一套類庫,适應範圍窄,可以搞ERP軟體,但效率不如其他語言高,而且類庫并沒有對DDK,openGL,D3D等專項上司的函數庫進行封裝。而Windows SDK提供了專題開發的平台。

MFC中對所有的句柄,對象,消息都進行了嚴格的檢測,如果你不知道它的内部機制,随便調用函數很容易出錯,而SDK提供的是一種寬松的開發環境,你可以用面向對象的思想定義自己的類,對界面控件進行封裝。

在一些專題開發項目,你可以不懂MFC,但是在一些正常的軟體開發,你必須熟悉MFC,同時還要懂SDK.‍ win32是windows下的最基本的程式設計方式,使用它得到的代碼最幹淨最有效率,也是最底層,它是其它所有方式實作的基礎。一般指隻使用API和SDK。

MFC是對win32的封裝,使用win32程式設計方法,寫了一個又一個類,讓我們不用再重複大量勞動。但畢竟是封裝,是以不可能完全實作win32所有功能。用着雖然友善,但距離細節畢竟遠了,在個性個、特殊化方面還有差距。

兩者相比,win32更本質,MFC更抽像。從軟體工程來看,MFC更符合要求,更人性化。我們在正常使用中,優先使用MFC

1.MFC的功能正常情況下可以滿足絕大部分的需要,特殊需要,也可以直接用API和SDK實作。但反過來,win32下想用MFC的東西,卻是非常困難的。MFC下開發,是包融了win32.

2.MFC和vc融合,擁有大量人性化的東西,會極大增加開發效率。如界面、通用對話框等。而且它的代碼是微軟寫的,比你自己用win32實作更值得讓公司信賴。而且代碼量會降低很多,更容易調試和維護。

3.很多功能你自己實作起來非常麻煩,甚至你的技術沒達到那标準,而使用MFC很簡單,這會迫使你使用它。

有些場合下不要使用MFC:

1.三維遊戲等,這些東東MFC并沒有包含,這時需要使用其它庫。使用MFC反而不好,會造成臃腫和拖累。

2.特殊程式,如病毒等背景工具。它們根本不需要什麼界面,需要的就是效率,而且要求體積小。這些無疑Win32比MFC強,甚至連win32都可以不用。

3.簡單的實作,win32上簡陋的東西就夠用了,或者就算不夠用,但有STL等C++自帶的,那麼MFC就可以不需要了。win32更符合老程式設計員的習慣。而且如STL,同樣功能下,事實上比MFC更優秀。mfc在d3d,opengl,ddk開發的弊端:

1.MFC是一種封裝類,是個寵然大物。當你使用d3d,opengl等它沒有封裝的進行開發時,使用它完全是種浪費,不需要它為何要挂上它呢?如編d3d時,它本身已經實作了幾乎所有的需求,别再拖個油瓶。

2.MFC不僅是一種封裝類,更是封裝了一種MFC程式設計思想。它具有特有的文檔視圖結構和消息影射。我們在做普通程式時,這些會給我們帶來友善。但做d3d時,程式設計思想又回歸win32,那樣更直接和有效。這時MFC的程式設計思想和方式就不合适了。特别是DDK,那是跟底層打交道,要短小高效,跟MFC是兩種不同追求風格。

3.事無絕對,選擇合适的也就是最好的,如果你在進行D3D開發時,還要使用MFC的東西也是可以的。如果不是大量使用,可以把MFC中你需要的部份扒開單獨使用。‍ win32指系統環境,MFC是微軟的一個開發平台。

樓主應該不是想了解win32與MFC的差別吧?因為MFC以前主要就是在win32環境中進行開發的,二者不是一個層面的啊。

MFC是對SDK的包裝。就像一瓶酒,它就是SDK,然後給這瓶酒加上一個盒子,它就成了MFC。