通常一個界面庫是否有廣大的使用人群,我覺得與以下幾個因素有關:支持的操作系統是否多樣,支持的操作系統市場占有率是否大,使用是否方便,是否有良好的"所見即所得"WYSIWYG)的開發工具支持,是否有經濟實力的雄厚的大公司支持等等。結合我使用過的的幾種C++界面庫和大家交流一下。
1.MFC(MicroSoft Foundation classes):相信在windows下進行開發的各位同僚們都用過MFC進行界面開發。我記得自己初次接觸MFC是大學畢設一個關於數字圖像處理的課題,用的IDE是VS 6.0,那時就干了件“重復造輪子“的事,而且是個大輪子,那時並不知道VS有生成MFC程序的向導,結果坐在電腦前沒黑沒白的照著一本參考書上的自動生成代碼敲了幾天幾夜,結果很殘酷,沒運行起來。著實把我嚇了一跳,以為開發軟件這麼難,現在想想MFC的自動生成代碼中的有些語言特性直到現在自己也未必完全了解。之後學習了孫鑫的《VC++深入編程》這才算是對MFC漸漸入了門,但是在此後有相當一段時間內都是對MFC只了解其表,會應用,並不了解其本質。直到看了侯捷老師的《深入淺出MFC》才算是對MFC有了本質的認識。侯捷老師的寫作風格很好,這是我第一次真正喜歡上一本計算機書籍)正如侯捷老師所說,要學習MFC首先要對windows程序的事件驅動特性有所了解,消息的產生,獲得,分派,判斷,處理;還要了解C++的性質封裝,繼承,多態)。之後,侯捷老師又仿真了MFC的六大關鍵技術:MFC的初始化過程,RTTI執行時類型識別),動態生成,Persistence永久留存),消息映射,消息繞行,到此為止,MFC已經被剖析的很徹底和細致了,你也可以掌握MFC的本質了吧!
我的使用體驗:支持MFC的IDE我使用過VS 6.0, 2008, 2010,其中 AppWizard,ClassWizard, Resource Editor讓我們能夠很快的構建一個MFC程序。我覺得用MFC實現簡單的UI功能還是很不錯的,但是要實現復雜,美觀的UI,編碼還是過於復雜其實有很多基於MFC實現的界面庫,有較好的界面效果,但其中有些要收費,我使用過的是Codejock.Xtreme.Toolkit.Pro)。用vs6.0 和 vs 2008 生成的MFC程序還要依賴相應的VC組件運行,生成的可執行程序由於包含了大量的庫比較大。vs 2010生成的可執行程序只需附帶運行時dll就行。
2.WTL(windows 模板庫):一個用來開發 Windows 應用程序的 C++ 的 UI 組件,它擴展了 ATL (Active Template Library) 提供了一系列的對話框、幀、GDI對象等等。我們使用的的金山衛士就是用wtl開發的....。以下引自《WTL for MFC Programmers 》“WTL 具有兩面性,它沒有MFC的界面GUI)類庫那樣功能強大,但是能夠生成很小的可執行文件。如果你象我一樣使用MFC進行界面編程,你會覺得MFC提供的界面控件封裝使用起來非常舒服,更不用說MFC內置的消息處理機制。當然,如果你也象我一樣不希望自己的程序僅僅因為使用了MFC的框架就增加幾百K的大小的話,WTL就是你的選擇。當然,我們還要克服一些障礙:1) ATL樣式的模板類初看起來有點怪異 ;2) 沒有類向導的支持,所以要手工處理所有的消息映射。 3) MSDN沒有正式的文檔支持,你需要到處去收集有關的文檔,甚至是查看WTL的源代碼。4) 買不到參考書籍 5) 沒有微軟的官方支持 6) ATL/WTL的窗口與MFC的窗口有很大的不同,你所了解的有關MFC的知識並不全部適用與WTL。 從另一方面講,WTL也有它自身的優勢:1) 不需要學習或掌握復雜的文檔/視圖框架。 2) 具有MFC的基本的界面特色,比如DDX/DDV和命令狀態的自動更新功能譯者加:比如菜單的Check標記和Enable標記)。 3) 增強了一些MFC的特性比如更加易用的分隔窗口)。 4) 可生成比靜態鏈接的MFC程序更小的可執行文件譯者加:WTL的所有源代碼都是靜態鏈接到你的程序中的)。 5) 你可以修正自己使用的WTL中的錯誤BUG)而不會影響其他的應用程序(相比之下,如果你修正了有BUG的MFC/CRT動態庫就可能會引起其它應用程序的崩潰。 如果你仍然需要使用MFC,MFC的窗口和ATL/WTL的窗口可以“和平共處”。
我的使用體驗:談起使用WTL的過程,很早就聽說過它的這些特點,出於對新技術的熱情,私下裡一直在進行學習,使用的書籍就是《WTL for MFC Programmers》,自我感覺用WTL進行開發非常便利。碰巧工作上接觸了一個使用WTL開發的開源軟件http://infrarecorder.org/,界面功能效果都很不錯,重要的是他幾乎用到了WTL的各種常見界面實現,而且封裝的相當好,我在這個軟件上進行了很多基於WTL和COM的擴充開發,讓我學習到了不少WTL和COM的開發經驗。另外,金山衛士的部分開源代碼我們也可以進行學習。開發環境依然是VS系列,可以下載相應的WTL版本作為插件集成入VS。
3.Qt:相比於以上兩種界面庫,他最大的優點就是跨平台。以下引自開源中國社區“Qt是諾基亞開發的一個跨平台的C++圖形用戶界面應用程序框架。它提供給應用程序開發者建立藝術級的圖形用戶界面所需的所用功能。Qt是完全面向對象的,很容易擴展,並且允許真正地組件編程。Qt 具有下列優點:優良的跨平台特性: Qt支持下列操作系統: Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, HP-UX, Digital UNIX (OSF/1, Tru64), Irix, FreeBSD, BSD/OS, SCO, AIX, OS390,QNX 等等;面向對象 Qt 的良好封裝機制使得 Qt 的模塊化程度非常高,可重用性較好,對於用戶開發來說是非常 方便的; Qt 提供了一種稱為 signals/slots 的安全類型來替代 callback,這使得各個元件 之間的協同工作變得十分簡單;豐富的 API Qt 包括多達 250 個以上的 C++ 類,還替供基於模板的 collections, serialization, file, I/O device, directory management, date/time 類。甚至還包括正則表達式的處理 功能;支持 2D/3D 圖形渲染,支持 OpenGL;大量的開發文檔;XML 支持;
我的使用體驗:仍然是出於對新技術的熱情進行的Qt開發,感覺實現復雜的UI功能和效果比以上兩種界面庫容易的多,我用的IDE是Qt Creator,很炫,但是感覺運行效率上沒VS塊當然是windows平台下的體驗),特別是逐步調試推進很慢,有時GCC編譯器會無響應也可以選擇windows下的編譯器),另外發現一點:數據庫操作時,Qt對SQLite的封裝執行SQL語句很慢,我測試了一下,在sqlite管理工具中執行一條帶表關聯和分頁的SQL語句需要393ms,但是采用Qt封裝的SQLite執行需要1410ms,這數量級可差距大了。究竟是誰的問題?)
以上講了三種自己使用過的C++界面庫,業界有很多對三種界面庫的對比,優點,缺點,適不適合用雲雲,我覺得在沒有經過實際應用的情況下去否定另一種是不公平的,這在某種程度上也反映了我們對技術的保守心態,有些人還會抵觸新的技術,我還是認為最好多學幾種相關技術,然後在最合適的場景下去應用,比如如果要進行網絡分發客戶端的情況下我會拋棄MFC而選擇WTL,減少網絡數據傳輸量,要是在跨平台場景下我會首選Qt,你懂的。
本文出自 “永遠的朋友” 博客,請務必保留此出處http://yaocoder.blog.51cto.com/2668309/780787