現在(2013年12月)學習 MFC 的意義是什麼?
意義在於見識一個醜陋的C++框架能丑到什麼樣子,以便時時警醒自己不要在工程里做出這種東西。
不過現在還有很多衛道士宣揚MFC永遠不會過時,並且說MFC面向對象,要認真學習MFC設計思想云云,真讓人大開眼界。
——————————————
如vczh所說,
大家千萬不要學@王凝枰 ,因為MFC有一些地方不好,就否定他的全部
我沒有否定MFC的全部,我也承認MFC有其可取之處(實際上我很懷疑一個一無是處、毫無優點的框架的存在性)。MFC受制於歷史原因,設計不夠好;雖然學習MFC不是毫無意義,但把這些時間用來學習其他更現代的框架能更有收穫。
MFC過時了,特意去學沒必要,可以先學Qt。但MFC仍然很有意義,無法放棄。
因為現在很多軟體都是老項目,不得不用MFC,雖說各種工具發展快,一個又一個,但其實很多,甚至可能大部分的桌面項目仍然是使用老框架,歷史問題,很難解決。
而且這些項目界面和功能耦合緊密,沒有按照面向對象的規範寫,許多功能是為了配合MFC的框架實現的,很難移植到Qt框架中去,故不如仍然使用MFC。還有就是如果熟練的話,使用MFC能省掉很多環境配置和軟體發布的麻煩。
配置一個Qt環境還是很煩的,Qt Creator有不同的版本,Qt有不同的版本,還有不同版本的操作系統,如果要使用OpenGL之類的第三方庫也存在版本問題。每次同事要接手配置環境都頗費功夫,各個版本都要對應上。有時甚至還要重新編譯Qt和Qt Creator,編譯一次便耗費一天之力,還不一定成功。發布一個Qt程序也很複雜,什麼發布出來的程序xp能用win7不能用之類的事情常有。但MFC全無這些麻煩,配置環境你就說一個visual studio 20XX就行了。發布程序的話各個版本的windows都兼容的很好,不會出差錯,項目直接打開,很方便。
所以學習MFC,很多時候是被迫的。不過用熟練了,也沒什麼,就是丑一點,功能都有。如果是作為入門,還是從Qt入手為佳。邏輯明確,很快就能學會。等學會了Qt,再去學MFC,也算是循序漸進,不至於太噁心。其實大家都錯了,MFC其實是沒飯吃的縮寫,不要把他聯想成什麼亂七八糟的GUI庫啥的。
==========================================
回想MFC剛開始出現的那一年,MFC其實用了很多大家現在都很喜歡的C++用法,譬如說兩段構造(嗯,google特別喜歡這個MFC的想法)啊,值類型class啊,等等。MFC基於的ATL的CString的構造更是精妙。不過因為這個東西實在是太古老了,再加上那個時候距離C++第一個靠譜的標準的出現還有很長的一段時間(我們知道C++98就是狗屎,到了03才開始能用的),所以做成這樣無可厚非。
大家千萬不要學@王凝枰 ,因為MFC有一些地方不好,就否定他的全部。能創造出MFC的人,肯定是有智慧的,需要洞察它內在的美,而不要人云亦云。雖然我也覺得MFC太JB難用了,但是MFC所用的面向對象的做法,還有他對MVC的做法(其實它的設計是好的,只是毀在了當年的C++上)啥的,並不是沒有可取之處的。
雖然我也同意mfc已經過時的不能再過時了,可我覺得,能說出這個話的人,不能說掌握,至少也該是學會了mfc的人吧。那些個大學弗一入學就學習mfc結果沒學會,至今不會寫窗口不會處理句柄和消息的人來黑mfc,總覺得怪怪的。
我不想炫耀我編過十年程序,我已經轉行做商務服務了。
可我相信,凡是真的編過十多年Windows程序的人,都不會怒罵MFC,至多有些微辭。因為很多人當年都從MFC里學到了很多知識技巧。在學習使用它,以及研習它的代碼時,新手、中手可以提高不少。
你若有時間,當然可以學習它,會有收穫。看看它是怎麼讓消息能覆蓋到任意類對象的,看看它的對象序列化方案,看看它是怎麼蹂躪了new運算符從而實現內存泄露檢查的。還不止這些。
最後,說MFC是界面庫的,屬於自我暴露。MFC試圖把Windows應用的全部包含進來,UI只是一小部分。
不過如果你學習它是為了明早起來馬上有飯吃就算了。十年前學習MFC是為了能方便地寫出像樣的windows程序,十年後的現在再學習MFC,應該是純粹想了解像這麼一個框架是如何被實現的這麼臭這麼長的了吧。
為了冒充自己十年前就開始寫C++? 說實話,現在學MFC真的沒有什麼意義,十年前MFC的確是比較主流的選擇,那個時候會考慮到很多機器沒有.NET framework。現在的話,如果是新寫個桌面app,用C#就可以了,還有WPF這樣的神器,有能力的可以像豌豆莢那樣,基於webkit來寫界面,把桌面開發轉為web開發。最後如果對程序大小有硬性要求,可以考慮WTL,鏈接的庫只有幾百k。至於QT,我覺得它的思想值得學習,但是由於它的雙許可證制度,真正使用還是得謹慎。
意義在於,你學了MFC之後會發現。其他的環境,語言,太TM簡單了!
學習它能讓你更多的了解windows。。。
現在學MFC?很不合適了吧!
但我絕對反感那些把MFC批評得一無是處的做法,畢竟那是十五年前的東西,那時的IT行業與現在比簡直是杳無人煙的沙漠與繁華的都市之間的差別,並且它確實讓一大批人沒花多少時間就寫出了可以在windows上運行的程序,如果沒有那個階段的積累,微軟以及我們怎麼可能進步到現在?
但時至今日,拋棄它吧。
我覺得如果是現在開始學習C++界面編程的話,MFC就不用考慮了。WTL, Qt比它好用多了!
MFC是MS的界面庫,但此庫已經很老的,一般拿來做demo版。 MFC可以讓你理解Windows窗口消息機制,當然要深入理解我寧願直接學win32API。 你先想清楚自己將來想從事什麼方向的開發,除非你想從事Windows客戶端開發,可以選擇MFC。否則都不需要MFC了。
自動化行業還真要用MFC
我不知道大家有沒有對比學習的體驗, 我很贊同這樣的方法。 如果你沒用MFC寫過程序,直接上手就是現代的WPF之類的MVVM框架, 你可能沒有很深的體會程序為什麼要這麼寫, 但是如果同一個程序你用MFC和WPF都寫一遍,我敢肯定你對於WPF的認識比你直接用WPF寫要更深一層。
MFC確實是個反面教材,告訴我們好的設計為什麼值得採用。mfc只是一個框架,現在的開發中使用已經不多了,若你是當做興趣學習下,可以了解下它的消息機制等,若是學C++,最好還是到linux下進行開發
最直接的當然是可以很方便開發windows客戶端了。現在好多公司里還會有一些老模塊,說不定就是mfc寫的。
如果不是工作需要就不用學了 比如你是在校學生的話,學web開發
個人認為MFC只是一個框架,方便你更加快捷的寫出windows客戶端程序,學習一個框架的意義在於會使用,方便自己的工作,更深層次的意義是當你學習完之後可以理解框架背後的意義,而不是僅僅知道怎麼用,平時還是多加強C++語言的學習吧
開發窗體應用程序。。
排除要做出一個桌面程序這樣顯而易見的目的,那麼提供一些學習它可能產生的副產品的思路:
- 有機會在不枯燥(相對)的情況下實踐和複習C++這一集大成的語言,方便以後熟悉其他語言;
- 不可避免的要去了解Windows SDK,那麼為熟悉更底層的Windows編程,或者理解更高級語言的實現思路創造方便。
推薦閱讀:
※做PC的客戶端軟體開發框架選擇,sciter vs QT,用哪個好點?
※為什麼微軟不大力支持C ,而重點支持C#,難道今後windows平台開發就告別以前的MFC那一套了?
※為什麼微軟不考慮提供一個更好的C++ GUI Framework for Windows?
※Windows 10 能讓 MFC 寫的程序,運行在 Windows 10 平板和手機上嗎?
※怎麼用 C++ 在一個月內做一個視窗程序,不要 MFC?