• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            huaxiazhihuo

             

            MFC,一開(kāi)始就錯(cuò)了

                    謹(jǐn)以此文祭奠過(guò)去多少年下來(lái),日日夜夜學(xué)習(xí)MFC源代碼的寶貴時(shí)光。

                    曾經(jīng)以為MFC是世界上最神圣無(wú)比的東西,發(fā)誓在沒(méi)徹底弄透MFC之前,絕不越雷池半步,碰都不要去碰LISP、ERLANG、PYTHON、VCL、ATL、STL、LOKI、BOOST各種美妙的好東西。即使一再聽(tīng)到高人說(shuō)MFC設(shè)計(jì)得不好,非常糟糕,也都至死而不悔,然后只要稍微聽(tīng)到有人在說(shuō)MFC的偉大,心里就特別高興。買(mǎi)了各種各樣的VC方面的書(shū),什么四大天王、什么幾十百千例、什么VC項(xiàng)目實(shí)例,徹夜苦讀,單步調(diào)試,一次又一次地徘徊在MFC套來(lái)套去的各種美妙代碼之中,觀察里面各個(gè)對(duì)象的值。一次又一次地感嘆MFC的偉大,一直在想,這輩子,如果能徹底地掌握MFC里面的一切秘密,朕就心滿意足了。終于有一天,終于徹底醒悟,原來(lái)MFC真不是好東西,不過(guò)就是那些伎倆而已,真不該將它看得如此的偉大。這種念頭一起來(lái),再回過(guò)頭來(lái)看MFC的一坨一坨代碼,只覺(jué)得清晰無(wú)比,又感覺(jué)代碼之中充滿了各種無(wú)奈。接著再看看那些VC方面的書(shū),除了四大天王還稍微有些可取之處,其他的任何一本,奇臭無(wú)比,沒(méi)有一行代碼經(jīng)得起推敲, 文筆也糟糕無(wú)比,其內(nèi)容又一再重復(fù),抄來(lái)抄去,真正是一本又一本的狗屎。 感嘆一下:這些書(shū)犧牲了多少寶貴的樹(shù)木,又折磨死了多少讀者的腦細(xì)胞,實(shí)在罪大惡極。

                    在MFC大河日下的當(dāng)今的大環(huán)境之下,在下也不想對(duì)它落井添石,畢竟也在其上學(xué)到不少好東西,特別是閱讀代碼的能力,試問(wèn)這么糟糕復(fù)雜的框架都可以精通,天下還有什么代碼能看不懂(別自信滿滿,你敢碰BOOST里面的那些奇技淫巧,匪夷所思的幻碼嗎)。但實(shí)在忍受不了軀體內(nèi)另一個(gè)人日日夜夜,旦夕不停的訴求,兼之又一直恨鐵不成鋼,又為自己失去的青春陣痛不已。而VC2008中BCG的出現(xiàn)之后,VC2010還依然保留著那些蠢笨無(wú)比的BCG文件,不思悔改,終于讓某徹底對(duì)MFC死心了,這貨沒(méi)得救了。

                    好吧,廢話少說(shuō),趕緊進(jìn)入正題。

                    國(guó)內(nèi)C++界中一大俠說(shuō)過(guò),任何東西,都要先抓住其主干,其他的一切細(xì)節(jié),都可以留待以后慢慢補(bǔ)充,否則,一開(kāi)始就陷入細(xì)節(jié),想跳出來(lái)就不容易了。大俠此語(yǔ),實(shí)在有道理。(不知為什么,此大俠后期一直在對(duì)C++表示不滿,當(dāng)然,人家現(xiàn)在的境界,豈是我等小民所能體會(huì))。不說(shuō)其他,就說(shuō)在C++中,必須站在一個(gè)高度上,縱觀全局,才能將一切看得通通透透。于是,下面就嘗試爬上高峰,來(lái)俯瞰MFC中的眾生。MFC的主干,在下看來(lái),既不是什么六大關(guān)鍵技術(shù),也不是什么文檔視圖結(jié)構(gòu),更不是COM的封裝,而是為了將原始的API中的各種對(duì)象,好比窗口、GDI、設(shè)備環(huán)境等,都映射成相應(yīng)的多線程安全的C++對(duì)象,好比將HWND搞成CWnd,以期減輕WINDOWS下界面開(kāi)發(fā)的工作量。

                    這種想法,其實(shí)也無(wú)可厚非,如果真能封裝得好,確實(shí)可以提高生產(chǎn)代碼效率,但是從C++和WINDOWS的設(shè)計(jì)觀念中來(lái)看,這種映射,還是存在很大的問(wèn)題,稍后再述。問(wèn)題在于,MFC的實(shí)現(xiàn),異常丑陋呆板,通過(guò)幾個(gè)全局的線程安全局部變量的映射表,將句柄(Handle,此詞譯得相當(dāng)令人惡心)與其相應(yīng)的C++對(duì)象指針形成一一對(duì)應(yīng),并且指定,在大部分的消息處理和參數(shù)傳遞中,所有的參數(shù)由原本的句柄一律由對(duì)象指針來(lái)代替,然后就高高興興地宣稱(chēng)已經(jīng)完成任務(wù)了,這實(shí)在讓人哭笑不得。不說(shuō)別的,即使是消息處理,MFC即使已經(jīng)做了很大的努力,也都無(wú)法將句柄參數(shù)搞成對(duì)應(yīng)的對(duì)象指針,單是這一點(diǎn),就已經(jīng)失敗了。然后再看看,它最后封裝的做法,不過(guò)是將API函數(shù)中的第一個(gè)參數(shù)為句柄的都改成相應(yīng)的C++對(duì)象的函數(shù)成員,好比將SetWindowText搞成CWnd::SetWindowText,美其名曰,薄薄的封裝。這真是要笑掉大牙了,既然是這樣的薄薄的封裝,那還干脆不如不封裝了,我想破了頭,也看不出這樣的封裝,帶來(lái)了什么樣的好處。反而將原本全局函數(shù)的各種靈活性,都給葬送在類(lèi)成員函數(shù)這個(gè)監(jiān)獄中。全局函數(shù)的各種好處,除了是全局這個(gè)缺陷之外,實(shí)在都是類(lèi)成員函數(shù)沒(méi)法比的。而且,鑒于API中數(shù)量實(shí)在太多,于是搞出來(lái)的C++對(duì)象都是龐然大物,最臭名昭著的,當(dāng)然要數(shù)CWnd和CDC這對(duì)黑風(fēng)雙煞了,使用起來(lái),極不方便,極難學(xué)習(xí)。一個(gè)類(lèi)的函數(shù)過(guò)多,無(wú)論如何,都是失敗的設(shè)計(jì)。還有,如果WINDOWS系統(tǒng)新增了什么使用到句柄的函數(shù),這些類(lèi)也都要相應(yīng)地增加新成員函數(shù),再進(jìn)一步說(shuō),如果用戶自己因?yàn)樾枰惨_(kāi)發(fā)使用到句柄的全局函數(shù),要怎么想辦法整成員函數(shù)呢。其實(shí),MFC中的所謂的線程安全,其實(shí)也不過(guò)是自欺欺人的說(shuō)法而已,你要想在MFC中多線程的使用窗口對(duì)象,即使不是不可能,那也要花費(fèi)九牛二力氣才能在多線程中共享窗口對(duì)象,一切皆只因MFC已經(jīng)很努力地做到了不讓你在多線程下使用窗口對(duì)象。

                    好了,再進(jìn)一步考察,在這種思路的指導(dǎo)下,最后MFC被設(shè)計(jì)成一個(gè)什么樣的框架。一直很懷疑想,MFC的設(shè)計(jì)者,是否不是對(duì)WINDOWS API的精神了解得不透徹,又或者對(duì)C++不是很精通,否則,無(wú)論如何,斷斷都不會(huì)整出MFC這樣的一個(gè)人不象人、鬼不似鬼,精神分裂、做事虎頭蛇尾的鬼東西出來(lái)。要不然,我們用MFC開(kāi)發(fā),就不會(huì)覺(jué)得束手束腳,很不好施展拳腳,一再感覺(jué)一直受制于其可惡的呆板的框架之下,這并不是說(shuō)框架不好,只是MFC這套框架,實(shí)在很不好擴(kuò)充。這樣也罷了,問(wèn)題是,MFC在使用上,又很不人性化,你又要陷入各種各樣的細(xì)節(jié)之中,什么二段構(gòu)造,有些對(duì)象又要自己刪除,有些又不能自己刪除等,更要命的是,MFC的運(yùn)行效率又臭名昭著。有些同學(xué)就會(huì)問(wèn),貌似在MFC開(kāi)發(fā),其實(shí)也很強(qiáng)大很靈活,殊不知這種強(qiáng)大和靈活,那都是源于C++的強(qiáng)大靈活,也源于WINDOWS系統(tǒng)的強(qiáng)大靈活,源于MFC只對(duì)API只作了一層薄薄的封裝,與MFC本身的設(shè)計(jì)沒(méi)什么太多的關(guān)聯(lián)。當(dāng)拋開(kāi)MFC,直接用API和C++來(lái)寫(xiě)代碼,就體會(huì)到什么才叫做強(qiáng)大靈活,除了代碼比MFC多一點(diǎn)之外,一切都要比MFC來(lái)得清爽,也要來(lái)得容易維護(hù)。如果,如果設(shè)計(jì)做得好,可能總體的代碼量不會(huì)比用MFC的多也說(shuō)不定。

                    于是,這么一個(gè)偉大的框架,表現(xiàn)出來(lái)的,很多地方都C++的精神格格不入。承然,MFC剛開(kāi)始設(shè)計(jì)時(shí),缺乏太多的C++的特性的支持,而不得不另起爐灶。但是,就算沒(méi)有C++98中的功能支持,MFC也不該出現(xiàn)以下這么重大的設(shè)計(jì)問(wèn)題。
            1、 不需要用到的特性,我們依然要付出種種代價(jià)。我們看到CCmdTarget集成了COM的功能,CWnd中對(duì)ActiveX的支持,就算我們的代碼不包含一丁點(diǎn)使用到COM的代碼,我們都要背負(fù)每個(gè)CWnd中將近100個(gè)字節(jié)的大小,運(yùn)行過(guò)程中一再要忍受框架代碼中對(duì)ActiveX變量的一次又一次地檢查。我們看到,就算不使用文檔視圖結(jié)構(gòu),CMainFrame中都要承受對(duì)它的支持代碼,和各個(gè)不必要的成員變量。總之,MFC中有很多特性,就算不愿意使用,它們還是在那里,不容許我們忽視。
            2、 耦合太厲害。我們看到,CWnd中居然出現(xiàn)了對(duì)子類(lèi)CView和CFrameWnd的引用,CControlBar的成員函數(shù)中有對(duì)CToolBar的CAST,然后,CFrameWnd又引用到CControlBar和CView,CControlBar和CView也都用到CFrameWnd的函數(shù),各種各樣好厲害的循環(huán)依賴(lài),這么糟糕的設(shè)計(jì)竟然出現(xiàn)在C++的著名的界面框架,不得不令人嘆息不已。這樣的耦合,就是在MFC之中,一個(gè)類(lèi)設(shè)計(jì)得再好,也只能在某些特定的場(chǎng)合下使用。好比, CControlBar, CSplitterWnd這兩個(gè)好東西只能活在CFrameWnd,CView的環(huán)境下,想在其他的地方使用上就煞不容易了。就算是著名的文檔視圖結(jié)構(gòu),也都是問(wèn)題很大,如果我的類(lèi),想要訂閱文檔中的通知消息,還要求必須派生于CView中,這個(gè)限制也太厲害了,于是為了它這個(gè)死板的設(shè)計(jì),有多少次,我們必須改變?cè)O(shè)計(jì),以適應(yīng)MFC的無(wú)理取鬧的要求。
            3、 功能太過(guò)單薄:MFC僅僅是作為一個(gè)界面的基本框架而已,僅僅實(shí)現(xiàn)了從句柄到對(duì)象的映射,然后,再加上一點(diǎn)點(diǎn)所謂的文檔視圖的MVC模式,必要的多視圖多子窗口的支持,基本的必要的COM支持,對(duì)API的薄薄封裝,僅此而已(至于SOCKET、WININET和數(shù)據(jù)庫(kù)的MFC類(lèi),又有多少可利用的價(jià)值)。有多少次,我們想對(duì)對(duì)話框進(jìn)行拉伸的操作;有多少次,我們需要用到表格控件;……,但是,這一切,想要MFC提供更加強(qiáng)大的控件,完全都沒(méi)有。必須求助于第三方控件公司庫(kù),好比,BCG、XTREME,你們知道,MFC的代碼就算再爛,也還是很有分寸,還能保住最基本的底線,但是,第三方控件的代碼,那真的是,讓人大驚失色,沒(méi)有做不到的,只有想不到的。要知道,C++可是很強(qiáng)大的,但是,用它做出來(lái)的框架,卻如此的功能之小。
            4、 MFC中的類(lèi)的功能不單一,承載了太多的責(zé)任,導(dǎo)致很容易就出現(xiàn)了很多重復(fù)的代碼:好比CCmdTarget中原本只是為了可以處理消息,后來(lái)居然還兼具COM的功能。又好比,CList, CMapPtrToPtr里面又都包含了內(nèi)存池的實(shí)現(xiàn)代碼,原本這些內(nèi)存池的實(shí)現(xiàn)代碼就應(yīng)該剝離出來(lái)。
            5、 行為錯(cuò)亂,神經(jīng)分裂,沒(méi)有統(tǒng)一的接口,以至于使用起來(lái),極易出錯(cuò)。很多地方,都努力地去做了,但是都做得不徹底。企圖封裝所有的WINDWOWS的界面的API,但無(wú)論如何,都做不到,而且它自己內(nèi)部也都知道沒(méi)辦法做到,但它還要努力地去做。
            ……

                    各種各樣的問(wèn)題,難怪MFC的書(shū)那么多,沒(méi)有一本可以作為面向?qū)ο蟮牡浞秾W(xué)習(xí),即使四大天王,也不過(guò)只是沒(méi)有那么惡臭而已。原來(lái)一切,皆只因?yàn)樵搭^本就臟了。之前還以為,MFC,還能算是一積心堆砌而成垃圾。總體設(shè)計(jì),雖然確實(shí)糟糕透頂,但細(xì)微上看,還能做到讓人擊節(jié)贊嘆,好比對(duì)于線程局部變量的封裝擴(kuò)展,消息映射表。可是,即使局部代碼的實(shí)現(xiàn),也都充滿了重重的缺陷。

                    如果說(shuō)MFC還有些可圈可點(diǎn)之處,VC2008之后引進(jìn)的BCG的界面補(bǔ)丁,完全就將這些可稍為搬上臺(tái)面的東西直接給淹沒(méi)掉。BCG的出現(xiàn),對(duì)MFC而言,根本就不是狗尾續(xù)貂,而是狗尾之上再綁上一只蠢笨無(wú)比的大豬。直接就將MFC推入萬(wàn)劫不復(fù)之地。

                    MFC,OH SHIT,你可以去死了!

                    突然驚覺(jué),C++的類(lèi)庫(kù)框架,無(wú)不充滿了各種各樣的缺陷,除了STL還差強(qiáng)人意之外(其實(shí)也問(wèn)題多多),沒(méi)有一個(gè)能夠讓人看著滿意,用著放心。于是,我要投入LISP和C的懷抱之中了,不,一定要頂住,C++是我的最?lèi)?ài)。

            posted on 2012-05-30 14:15 華夏之火 閱讀(19873) 評(píng)論(47)  編輯 收藏 引用

            評(píng)論

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 14:56 空明流轉(zhuǎn)

            MFC挺好啊,C++沒(méi)有自省和動(dòng)態(tài)機(jī)制,GUI再怎么設(shè)計(jì)都是一團(tuán)糟。  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 15:10 漂漂

            樓主,改wtl吧  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 15:18 華夏之火

            @空明流轉(zhuǎn)
            自省和動(dòng)態(tài)機(jī)制確實(shí)是界面框架的利器,但是,用C設(shè)計(jì)界面,簡(jiǎn)簡(jiǎn)單單,卻似乎從來(lái)都不存在這些問(wèn)題。功能更豐富更強(qiáng)悍的C++, 起碼也要實(shí)現(xiàn)C能做到的一切事情,并且,最后的效果,絕不能比C遜色。但可惜MFC,明顯做不到  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 15:19 華夏之火

            WTL也不了多少,不過(guò)是效率上去了而已,靈活性還是沒(méi)有原始的C那么好@漂漂
              回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 15:31 MFC徹底

            一樣啊!!!!都遭比爾傷慘了!  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 15:45 地里的

            樓主可以嘗試下Qt,我在Qt之前也是用的MFC。我個(gè)人感覺(jué)Qt設(shè)計(jì)的非常好!  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 15:51 空明流轉(zhuǎn)

            @華夏之火
            C啊,我是不懂C哪里簡(jiǎn)單了。。。話說(shuō)Framework本來(lái)就是限定性的。。。  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了[未登錄](méi) 2012-05-30 16:01 路人甲

            非行班出生,連c++都沒(méi)有系統(tǒng)的學(xué)過(guò),只是用Qt、python分別寫(xiě)過(guò)小軟件,對(duì)強(qiáng)耦合也是比較不爽的,這段時(shí)間在嘗試go和lisp。特別是lisp,貌似這種去耦更適合分布式計(jì)算,最近很火的Mapreduce就是這樣  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 16:20 2

            1.推薦WTL
            2.其次QT

            WTL開(kāi)源,你可以自己看著辦。但很多工作還是得自己做。

            QT也不錯(cuò),用過(guò),用起來(lái)挺爽的感覺(jué)。

              回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 16:24 華夏之火

            不好意思,說(shuō)錯(cuò)了,C的簡(jiǎn)單是指語(yǔ)言層面,于是,用它設(shè)計(jì)做出來(lái)的東西,非常實(shí)在,不會(huì)讓你疑神疑鬼。框架確實(shí)有局限,但MFC也管得太嚴(yán)了,除非對(duì)MFC太過(guò)精通,否則難以除破它的種種限制@空明流轉(zhuǎn)
              回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 16:26 華夏之火

            QT自己搞了一套標(biāo)準(zhǔn),還要先重新編譯過(guò),不喜歡。并且動(dòng)輒十幾M的庫(kù)庫(kù),更加不喜歡。@地里的
              回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 16:28 華夏之火

            QT確實(shí)用著要比MFC爽,但我過(guò)去一直就喜歡MFC的復(fù)雜@2
              回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 16:29 華夏之火

            羨慕,沒(méi)有用過(guò)MFC,沒(méi)有經(jīng)歷過(guò)C++的細(xì)節(jié)糾纏折磨,幸福啊@路人甲
              回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 16:43 地里的

            呃……Qt官方有編譯過(guò)的庫(kù)。
            并且你如果自己編譯的話,可以使用靜態(tài)庫(kù)啊。
            那樓主現(xiàn)在在Windows下做界面開(kāi)發(fā)用啥玩意兒?  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 16:52 華夏之火

            @地里的
            很無(wú)奈,還在用MFC,公司要求,益發(fā)令人難受  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 18:14 Richard Wei

            哈哈,恭喜,博主終于醒悟了  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 19:22 bigbug

            您媽?zhuān)琈FC shit,C++難?吃屎容易  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 19:54 鐘謝偉

            那么久的MFC歷程,如果要讓你靜下心來(lái),寫(xiě)一篇贊揚(yáng)MFC的文章的話,會(huì)怎么樣呢,很期待。怎么說(shuō)事情都是有兩面性的,并且它在市場(chǎng)上流行了那么多的年頭。其實(shí)本人沒(méi)咋接觸過(guò)MFC,在選擇gui設(shè)計(jì)的時(shí)候,最初選擇的是直接調(diào)用api,后來(lái)選擇的是wxwedget(入門(mén))的。時(shí)代總是在變,庫(kù)也應(yīng)該是與時(shí)俱進(jìn)的,不過(guò)它還有適合使用的地方吧。
            一個(gè)不熟悉MFC的人辯證的看法。  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 20:33 墨魂

            當(dāng)初學(xué)C++的時(shí)候,最后一次老師說(shuō)如果沒(méi)學(xué)MFC,那C++就算白學(xué)了。當(dāng)初我沒(méi)有懷疑這句話,然后就去學(xué)了。看了一個(gè)月的MFC,第一個(gè)例子我怎么也弄不明白。感謝我的偏執(zhí),能徹底摒棄WINDOWS的一切。在LINUX上,學(xué)QT,一個(gè)月,我差不多能熟練運(yùn)用。這世界上有天才,就有天生優(yōu)秀的設(shè)計(jì)。更何況在開(kāi)源世界里,是無(wú)數(shù)的天才。  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-30 21:55 遠(yuǎn)行

            我mfc也用了很久,除了大一的c語(yǔ)言課程設(shè)計(jì),以后基本所有的實(shí)驗(yàn),課程設(shè)計(jì),項(xiàng)目全部是mfc做的界面。mfc應(yīng)該算用得比較熟悉了,四大名著也看了2本左右,不過(guò)看了之后還是忘了。感覺(jué)真心學(xué)設(shè)計(jì)還是先用吧,要不然即使看了設(shè)計(jì)還是會(huì)忘記的。mfc確實(shí)不怎么好用,甚至比算法還難用。我學(xué)算法也比較多,至少熟悉的算法我不用查文檔能寫(xiě)出來(lái),但是用了這么久的mfc,如果沒(méi)有g(shù)oogle和csdn,我很多程序的功能根本做不出來(lái),只是翻msdn連地方都很難找。至于看書(shū)的數(shù)目的話,我也不會(huì)少,我翻書(shū)速度很快,關(guān)于mfc的書(shū)看過(guò)至少不下8本,如lz所說(shuō),看那些書(shū),要么就是浪費(fèi)時(shí)間,要么就是看不懂還是浪費(fèi)時(shí)間,很多mfc的書(shū)都是shit,除了四大名著。
            也不要說(shuō)我c++和Windows編程的知識(shí)很爛,大一暑假就啃完c++primer了,大二第一學(xué)期看的Windows程序設(shè)計(jì),幾年下來(lái),msdn,csdn之類(lèi)的都翻了不知道多少次了。。。mfc的代碼也真的不少了,如果mfc真的好用的話,我至少不應(yīng)該這么依靠google強(qiáng)悍的搜索能力。而且,到最后基本找到的出處是csdn和別人的博客。。。
            界面這個(gè)東西本來(lái)就扯淡,但是個(gè)人認(rèn)為在Windows做界面,還是了解Windows程序設(shè)計(jì)的基本原理最重要,用不用mfc倒是其次。用mfc學(xué)設(shè)計(jì)應(yīng)該
            還不錯(cuò),真心希望多一些偉大好用的界面庫(kù)給大家用,誰(shuí)都不想麻煩。。。  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-31 01:39 華夏之火

            要我說(shuō)MFC的好話,還真不容易呢。但好話,基本上四大天王已經(jīng)說(shuō)盡了,你要是感興趣,可以看看@鐘謝偉
              回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-31 01:42 華夏之火

            閣下很明智。嘿,你們的老師,那真是,不過(guò)大學(xué)里的老師,基本上都是這樣@墨魂
              回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-31 01:47 華夏之火

            有道理。我們?yōu)槭裁匆獙?duì)MFC如此責(zé)備求全,實(shí)在是因?yàn)槿绻痪∕FC,就沒(méi)辦法做出似模似樣的東西,但當(dāng)你一次又一次深入地學(xué)習(xí)MFC的源碼之后,就會(huì)對(duì)它很失望。一個(gè)框架,如果要求用戶必須精通它,才能用得好,那真的是很失敗@遠(yuǎn)行
              回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-05-31 15:01 codejie

            想想咱不用MFC多少年了。。。wxWidget也是個(gè)選擇。。。  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了[未登錄](méi) 2012-06-02 01:40

            mfc1.0在92年發(fā)布,別說(shuō)C++標(biāo)準(zhǔn)了,連dynamic_cast、異常都沒(méi)有。
            在那么惡劣的情況下搞出20年結(jié)構(gòu)都沒(méi)啥變化的類(lèi)庫(kù),可見(jiàn)設(shè)計(jì)者多么nb。
            對(duì)于耦合度,基本上在那個(gè)框架上開(kāi)發(fā)都得遵守框架上的要求,繼承某些類(lèi),耦合某些類(lèi)。  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-06-02 02:08 華夏之火

            可是,我要說(shuō)的是,即使沒(méi)有異常、dynamic_cast、type_info、template,甚至連虛函數(shù)都沒(méi)有,都可以寫(xiě)出比MFC更好的框架@壞
              回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了[未登錄](méi) 2012-06-03 01:02

            @華夏之火
            啥框架?  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2012-06-04 15:42 zjh

            GTK+  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2013-02-25 02:42 FrankWei

            特喜歡這文章,每每戳中笑點(diǎn),嘎嘎~  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2013-06-17 15:23 panovr

            挺好的文章。本來(lái)只是使用MFC,卻經(jīng)常需要去看MFC的源代碼。  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2013-06-18 11:09 panovr

            為什么這樣說(shuō):“而VC2008中BCG的出現(xiàn)之后,VC2010還依然保留著那些蠢笨無(wú)比的BCG文件,不思悔改,終于讓某徹底對(duì)MFC死心了,這貨沒(méi)得救了。”?  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2013-11-04 19:52 紅色代碼

            文中的大俠指的是云風(fēng)吧?MFC我也用了至少4年,接觸了WTL之后,就再也不想碰MFC了.太臃腫了,不過(guò)里面的好多東西 還是值得學(xué)習(xí)的.雖然浪費(fèi)了不少的時(shí)間,但是不后悔  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了[未登錄](méi) 2013-11-08 16:23 Aaron

            非常欣賞!  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2013-11-22 10:05 SuperCPlusPlusSystemAna

            C++,MFC依然是頂級(jí)開(kāi)發(fā)人員的王者工具;一個(gè)C++老兵如是的說(shuō)....  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2013-11-22 10:12 SuperCPlusPlusSystemAna

            來(lái)北京10年了,多少同事飛灰煙面,我依然能夠感受到公司對(duì)C++核心開(kāi)發(fā)人員的仰慕和尊重,那是發(fā)自肺腑的對(duì)王者程序員的尊重, 原因很簡(jiǎn)單,MFC也依然是程序開(kāi)發(fā)領(lǐng)域中,多少后來(lái)者不可逾越的領(lǐng)域,千萬(wàn)不要夜郎自大,那是因?yàn)槟愕乃揭廊贿€不夠.  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2014-02-21 22:30 Mr A

            任何讓用戶不專(zhuān)注于事物本身,而要去專(zhuān)注于工具本身的東西都是流氓  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了[未登錄](méi) 2014-02-27 11:45 Steven

            說(shuō)的非常在理,很贊!  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2014-03-05 15:20 噴傻缺

            @鐘謝偉
            呵呵,與時(shí)俱進(jìn)?
            看看已經(jīng)是半個(gè)世紀(jì)的C、C++,人家玩了10多年了依然活得有滋有味,而那些所謂的高級(jí)語(yǔ)言呢?一兩年就換框架就得從頭學(xué)習(xí),這叫與時(shí)俱進(jìn)?傻缺還差不多。
            傻缺到養(yǎng)活那些所謂的高級(jí)IDE公司被賣(mài)了還幫人家數(shù)錢(qián)。
            10年的C++經(jīng)驗(yàn)累計(jì)足以精通,10年VS幾度更改幾度學(xué)習(xí),精通你妹,10年后你還是唯有不停的買(mǎi)不停的學(xué)。傻缺!!!還與時(shí)俱進(jìn)!!!!  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了[未登錄](méi) 2014-03-23 14:54 菜鳥(niǎo)

            沒(méi)有樓主說(shuō)的那么糟糕吧。取你需要的開(kāi)發(fā),又沒(méi)有讓你把MFC都玩一遍;如果你從中獲得了你需要的,管他MFC,QT什么的,又有多大差別呢?  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2014-04-19 23:51 聞德鵬

            愛(ài)越深,恨越深么
            哎~~~  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2014-12-17 17:26 路過(guò)

            從仰望到批判是境界的提升,單看MFC孵化出了多少能夠批判她的猿,貢獻(xiàn)還是蠻大的。  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了[未登錄](méi) 2015-05-25 10:53 小龍

            傻x,這么偉大著作起始二等小輩隨便亂叫的  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2016-03-14 15:26 potato

            看過(guò)programming windows with mfc 2ed, window programming 5th 嗎? 有沒(méi)有擴(kuò)展過(guò)mfc 的默認(rèn)控件 , 如果沒(méi)有, 只會(huì)抄代碼, 那你只有剛?cè)腴T(mén), 你說(shuō)的BGC是什么寫(xiě)的 , 看看源代碼就知道, 雖然mfc 編寫(xiě)代碼要較長(zhǎng)時(shí)間, 但這個(gè)提供了最基本的工具, 你可以創(chuàng)造啊, 總之一句話, 你嫌mfc 麻煩, 要花好長(zhǎng)時(shí)間學(xué)習(xí), 拿別人做好的, 很爽。  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2016-05-03 14:38 intel

            樓主沒(méi)用過(guò) ultimate MFC win31  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2016-05-10 08:19 呵呵

            MFC就是垃圾,要不是微軟力推早完蛋了,一堆爛宏堆積代碼,沒(méi)法維護(hù)。QT貌似是個(gè)不錯(cuò)的選擇。WTL太小眾,wxWidget用的也太少,商業(yè)用啊,人得吃飯啊。GTK+那代碼沒(méi)法看,我覺(jué)得C就不適合做界面。所以還是QT吧,無(wú)論P(yáng)C還是嵌入式,尤其嵌入式。  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2016-05-10 09:55 華夏之火

            @呵呵
            以90年代的標(biāo)準(zhǔn)來(lái)看,mfc還是很不錯(cuò)的。那個(gè)時(shí)候沒(méi)有template,沒(méi)有exception,業(yè)界對(duì)于面向?qū)ο蟮乃伎家矝](méi)那么深刻。以那時(shí)的標(biāo)準(zhǔn)c++,沒(méi)有編譯器擴(kuò)展,mfc真是相當(dāng)不錯(cuò)  回復(fù)  更多評(píng)論   

            # re: MFC,一開(kāi)始就錯(cuò)了 2016-07-19 15:55 rita

            QT挺不錯(cuò)的,消息機(jī)制很靈活,封裝的也比較好,讓人感覺(jué)自己確實(shí)是使用框架而不是跟框架內(nèi)部較勁
            大學(xué)學(xué)c++以后要求我們自學(xué)界面庫(kù)做大程,別人幾乎都選的mfc,就我選的QT,那學(xué)習(xí)效率真的沒(méi)得說(shuō),后來(lái)又再自學(xué)mfc,感覺(jué)自己從現(xiàn)代社會(huì)進(jìn)入了原始社會(huì)【。  回復(fù)  更多評(píng)論   


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            導(dǎo)航

            統(tǒng)計(jì)

            常用鏈接

            留言簿(6)

            隨筆分類(lèi)

            隨筆檔案

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久精品一区二区影院| 亚洲精品无码久久不卡| 精品久久久久久无码中文野结衣| 国产精品美女久久久久av爽 | 天天综合久久久网| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 久久婷婷五月综合国产尤物app | 久久综合亚洲色HEZYO社区| 99久久精品国产麻豆| 亚洲国产精品狼友中文久久久| 亚洲欧美日韩中文久久| 久久精品国产WWW456C0M| 婷婷综合久久中文字幕蜜桃三电影| 丰满少妇人妻久久久久久4| 精产国品久久一二三产区区别 | 久久精品国产精品亚洲| 久久国产精品无码HDAV| 一级做a爰片久久毛片免费陪| 91精品国产高清久久久久久io| 一本综合久久国产二区| 狠狠色婷婷综合天天久久丁香| 亚洲国产视频久久| 国产精品无码久久四虎| 久久这里只精品国产99热| 亚洲va久久久噜噜噜久久| 亚洲精品成人网久久久久久| 久久免费线看线看| 999久久久无码国产精品| 久久久久久毛片免费播放| 欧美日韩精品久久久久| 久久精品国产一区二区三区不卡| 国产成年无码久久久久毛片| 伊人久久大香线蕉综合影院首页 | 2020久久精品亚洲热综合一本| 久久亚洲色一区二区三区| 91久久香蕉国产熟女线看| 99久久久精品| 狠狠色丁香久久综合五月| 99久久国产热无码精品免费| 久久夜色精品国产欧美乱| 久久精品国产亚洲AV高清热|