MFC真的過時了嗎?
MFC不適合快速開發,並且還有坑,那麼當今MFC的前景究竟是怎麼樣的?
如果僅考慮C++開發GUI又是什麼情況呢?
對
多講一句,這個問題還有這麼多關注的,可見國內編程教育多麼落伍。
----------------------
是的,過時了,而且是早就過時了。
本科的時候大二(十年前)開始不自量力學MFC,一個暑假都浪費在上面,連門都沒入,寫出來的界面不是這裡有問題就是那裡要崩潰,無奈放棄。大三不甘心,一個暑假又浪費在上面,還是什麼簡單的界面都寫不出來。大四找到一本侯捷的《深入淺出MFC》,仔細研究了一個暑期,才知道怎麼用MFC寫界面,還只能寫一些簡單的界面,而且效率低得令人髮指。這玩藝使我當時都開始懷疑C++語言了,總是問自己:C++的書裡面吹噓的什麼面向對象的好處呢,就是這種鬼樣子么?實在不甘心,又捧起孫鑫的《VC深入詳解》,仔細研究了半年,仍然跟SB一樣。
直到研二開學後不久的一天,聽說了Qt,去圖書館找了本書,看了兩個星期。就寫出來了可用美觀的界面,而且還沒什麼BUG,不會總是崩來崩去的,從此以後就把MFC給踢開了,而且收拾起了對C++語言的信心(Qt的設計是我見過的程序中應用面向對象技術最為優雅、簡潔、明了、友好的)。
MFC就是一坨屎,過時多少年了。
MFC=沒飯吃
真的。
現在再用MFC寫程序,簡直是自虐。
年輕輕的,不要想不開嘛,咱換種語言寫行不?
:-)大牛們說的很對,MFC過時了,可是我就是想知道windows里那麼重要的OLE方面,現在有什麼替代MFC的技術。
OLE的不可替代基本來自於office和剪貼板,office現在仍然在用OLE作為文檔內對象的組織方式。這其實本身並沒有什麼問題,windows里用COM介面的東西也不少了,問題在於OLE這個介面基本上沒有任何其他庫進行了完善的封裝,甚至官方的教程也都是按照MFC寫的,如果你想在非MFC項目里使用,官方建議你重構到MFC。你想自己封裝OLE倒也不是不行,COM介面的說明姑且是有的,具體怎麼用一些上古書籍也是有的,但是恐怕那些書比MFC還要過時,就沒見現在有能用的現成的庫。一個非常重要的東西的官方介面居然非常嚴重地依賴著一個過時的東西,這就讓人很為難了。
如果有人知道有什麼能用的非MFC的OLE的封裝,無論框架語言,請趕緊告訴我……是的,過時了,連微軟都這麼說,千萬別用。
MFC自然過時了,無論如何,都不推薦學習,但是,還是想說幾句公道話。
首先聲明,MFC本身缺陷重重,嗯,不要說MFC了,C++的框架或者類庫,那個不是缺陷重重,充滿爭議,眾口難調,即便是官方標準庫stl,而且還是模板的,也是諸多抱怨,比如allocator,比如string,iostream,比如algorithm裡面的find,find_if,copy,copy_if等非正交的演算法函數,又比如……,好吧剩下來的問題就和反射有關了,反正stl極力迴避動態類型信息,又沒有first class的函數類型和垃圾回收,即便是大力搞,也出不來什麼大奇蹟,基本上用起來也就是這個德行了。只是想說,mfc的各種不足,是有其自身的無奈,也很讓人同情,真的,特別是,面對著這個幾十歲的c++框架老人,很有些物傷同類。
回顧MFC誕生的那個時代,C++好像還沒有template,即使有,也不像如今裝備的各種令人髮指的奇葩功能。可以說的是,當時的c++,就是比 c with class 強一些,有多態,對了,還有多繼承,幸運的是,MFC堅持了單繼承,有意無意地迴避了很多C++多繼承設計上的很多本質複雜性問題。與此同時,靜態強類型面向對象的語言,似乎也就是C++只此一家了,基本上,MFC扮演著先行者的角色。但是,後面的delphi為何就那麼成功呢,那是因為object pascal給對象類型加了很多元信息數據,而且,還專門為gui框架開發添加各種語言擴展。有了這些外掛之後,做出來的框架,情況自然就很好多,反射對於靜態類型語言gui框架的開發,絕對是不可或缺之物。你看看,現在的面向對象語言,除了c++這個老頑固,那個不是大把大把的反射元數據,即便是c++,也做了妥協,搞了一個極簡版的type_info,簡到不能用的殘次品,真是不知所謂。好了,老朽決定言歸正傳,長話短說。
MFC的設計目標就是用C++裡面的一個子集封裝windows Api函數,以簡化windows應用程序開發的工作量。此外,MFC也不可能搞消息發送這種與靜態強類型語言格格不入的旁門左道,當然,MFC真要強硬以消息發送的模型來封裝win32的api,也未嘗不可,只是感覺很太那個,不如另起爐灶,直接用動態語言來做框架,好像object c那樣。而最終,MFC也確實完成任務了,就只是這個框架用起來,沒啥靈氣,笨重,束手縛腳,麻煩,各種不方便。更難能可貴的是,MFC通過內嵌類,還把COM,ActiveX這種大怪物整合進來,只是付出一點點代價,仔細追究,也就是一點點違和感而已,效果如此顯著,也確實讓人讚嘆不已。君不見用MFC開發的成功的商業軟體不知幾多,這可見MFC的成功有多大。並且,即便是MFC如斯之呆板,也沒有阻止高人在其上各種打洞,配套產品有bcg control bar(vs2008的補丁後,就開始集成在MFC裡面了,其代碼爛得罄竹難書),xtreme等第三方庫可以做出來很炫效果的界面。不像java,說你不行就真的不行,從根源上就杜絕了種種奇技淫巧,從一開始就不讓你做文章
MFC在那個年代獨創的幾大關鍵技術:運行時類型、動態創建、序列化、消息映射等,也算是腦洞大開的非凡產物,時至今時今日,還不是在各種框架設計上發光發熱。這些關鍵技術,基本上只靠虛函數和宏,而且這個時候的宏,還沒有用到boost preprocessor那樣的偽圖靈完備特性,能做成這樣,實在不容易,的確難能可貴,搞得筆者寫到這裡都有小小的感動。像是c++這種半殘language,沒有原生的函數類型,沒有豐富動態類型信息,沒有垃圾回收。然後還沒有偽圖靈完備的預處理,沒有真圖靈完備的template,霸王硬上弓做gui框架,又要享受靜態強類型的好處,一路推演,頂多就只能做成MFC這個樣子,不能更好的了。qt是因為加了動態類型信息,所以情況有所改善,但是,也不見得就多厲害了。如果由筆者用mfc的當時的c++那點破面向對象特性來做gui框架,多半會走上消息發送的邪路,否則,簡直難以下手做出來MFC這樣的珠玉,因為實在太噁心太無趣了。
從mfc上展開說起,可以說一套c++gui框架開發的辛酸血淚史,算了,時間有限,就先這樣吧。
過時了。
C++開發圖形界面當然要用輪子哥精心打造的Gaclib啦!@vczh
&
我很久沒用過C++寫圖形界面了,現在流行的應該是Qt,跨平台。還有一些不那麼流行的,比如
- wxWidgets: Cross-Platform GUI Library
- Gtk+: The GTK+ Project
不過上面這兩個歷史也很悠久了。
如果不是那種要大量用到平台特性的圖形界面程序,現在比較流行用JS來寫桌面應用。
Electron Slack, Atom, Visual Studio Code都是拿Electron JS寫的。
然而我在大三最應該花時間去搞明白網路、操作系統,卻花了很多時間去學mfc
像我這種一開始就用Gtk這種充滿動態事件回調的,感覺MFC的設計相當詭異。
這麼說吧,MFC作為90年代初dos-&>gui的最早一批框架,為了省內存,給開發者暴露了很多原始的底層介面,而且還盡量不使用虛函數。
作為大學課堂里的教學內容,這些暴露出來的原始的底層介面對於學生們理解windows編程(是的,大學課堂基本不會單獨介紹windows api, 如同不會單獨介紹stl一樣,從來不會講任何一個低層次的類庫或平台的api, 基本都只能通過mfc課程去了解。請別抬杠可以自學:對於學生來說,選擇靠譜的資料來閱讀都是很大的挑戰),GDI編程,都是非常有用的。
但是對於一些軟體開發者,尤其是一些本著隨便看幾下api文檔就要有所產出來跟進度的軟體開發者,或者是希望能隨便寫幾個函數就能產出圖表曲線的非專業軟體開發者(數據分析師,其它科學從業者),MFC又實在是太底層了,並不適合他們用。
尺有所長,寸有所短。MFC有一個現在越來越被忽視的優勢,就是包體積可以夠小,不用打包帶一個大庫。不過現在1是不用軟盤了,2是互聯網越來越快了 3是內存越來越大了 就沒多少人需求這個了,除了一些喜歡小而美的用戶。
如果題主真的要學 MFC 的話,我推薦這本:
哈哈哈 好像還要裝個 VS2005才行
MFC過時了,MS都放棄它了。
說那個時代只有MFC可用的,我就寫幾個時間點。
MFC1.0發佈於1992年。
Qt第一個版本發佈於1994年,早在那時就帶來了信號槽,這個到2017年都不過時的技術,這個強大到被boost抄,而不是抄boost的技術。
1994年,VC2.0和MFC3.0發布,相比同期的Qt又如何呢?
現在大眾口中所說的MFC,一般指的是使用最廣的,伴隨VC6.0發布的MFC4.2,發佈於1998年。
而同期的Qt,連KDE都做出來了。
更別說最新版,MFC都到10.0了,但又如何?
MFC伴隨VC2010發布,然而採用LGPL而推廣開的Qt4.5,發佈於2009年3月。
與同時期的Qt相比,MFC都是些什麼垃圾,難道不是吊起來打?
我就想不通了都特么快2020年為什麼還有人在用VC6和MFC? 還天天嚷嚷著這玩意好用......
MFC有年頭了,用起來比較繁瑣,不看好它的發展。但市場上很多存量產品基於MFC構建,學了它也有用武之地。再說技多不壓身,有時間學,能玩兒得轉,也不算浪費。
但就C++ GUI來講,我更喜歡 Qt ,優雅,強大。
MFC 已經化作歷史的塵埃了。
大學狗學校開MFC的課程 下載那個啥手冊最後更新好像是2002年的 孫鑫的視頻好像是2005年的
如果從好用的方面來說,肯定過時了。
MFC尤其是界面UI部分難用的要死,弄幾個分頁就知道了.....
不過,偶爾用來拉個內部工具之類的還是很好的,尤其是你手頭只有VC的時候...
推薦閱讀:
※微軟公司內部真的沒有設計部門嗎?設計工作都是外包的嗎?
※Surface laptop vs. The new surface pro?
※Windows 10 1607 版本更新完成的界面中都有哪些詩詞警句?
※duiLib 和 vczh 的 gacLib 哪個更具有實用價值?
※Windows 7 的開機速度為什麼那麼慢?
TAG:MicrosoftWindows | 編程 | C# | MFC | CC |