當前位置:編程學習大全網 - 源碼下載 - MFC,WTL,WPF,wxWidgets,Qt,GTK各有什麽特點?

MFC,WTL,WPF,wxWidgets,Qt,GTK各有什麽特點?

WTL不是壹個框架,但它使用泛型特性將Win API封裝在層中,設計思想並沒有擺脫MFC的影響。其實用泛型做UI框架只能算是壹種行為藝術,這種思路繼續發展下去就變得沒用了,比如代碼太復雜,編譯太慢,錯誤不容易調試。

而且包裝不全,HWND HDC之類的東西隨處可見。

主要用途是寫壹些小程序,或者作為其他UI框架的後端實現部分。比如我寫了壹個安裝卸載程序的小框架,很小,創建管理窗口的部分是WTL。

MFC是更高級的Win API包,比WTL包更徹底。很難看到HWND HDC,它還提供了很多實用工具類,比如高級控件、通用容器、IO訪問、網絡協議等等。另外提供了壹些基礎框架,比如Document/View,這是MVC的簡化版,只有MV,但是在數據管理和消息傳輸上沒有任何約束,導致Doc/View被用的壹塌糊塗。尤其是對於事件處理模型,消息映射是壹種簡單且容易出錯的方式,其唯壹的優點就是性能好。MFC從VC++1.x就有了,當時整個UI社區的設計思想都比較落後(蘋果除外),MFC背負著沈重的兼容負擔。比如vc++ 1.52的MFC程序,在vc2003中稍加修改就可以編譯出來,導致MFC後期沒有開發,只是沿著舊的思路改進了壹些細節,增加了壹些組件,但這是根本。

吃過語言虧的GTK,用c寫面向對象真的很痛苦,雖然思想上比MFC先進,但是寫出來的代碼比MFC啰嗦多了。相比MFC,在事件處理上更多了布局和信號/槽的概念,雖然用起來很麻煩。

WxWidgets基本上是壹個跨平臺的MFC,它抽象了不同平臺之間的差異。其實大部分後端都是平臺原生API實現的,很多控件都是系統直接原生的。有壹個版本是wxWidgets for GTK+,後端是GTK+,wxWidgets是壹個shell。這也是wxWidgets的優勢。WxWidgets編譯的程序分發包比較小,性能不錯。

這些都是90年代UI框架的技術層面,至今沒有太大進展。

先說21世紀的技術。

Qt雖然也是90年代出現的,但是在20世紀已經有了很大的進步。應該說它的起點比較高,從壹開始就是跨平臺的,不滿足於簡單的封裝系統API。而是要自己創建壹套完整的API和框架,甚至替換系統API,所以它不僅僅是壹個UI,而是涉及到APP開發中用到的壹切,包括網絡、數據庫、多媒體、腳本引擎等等。Signal/slot是Qt發明的,是C++語言在事件通知模型中最好的實現。連我都覺得應該寫進C++標準。估計C++委員會的頑固分子從來不寫GUI。

早期的QT沒有DirectUI的概念,每個QWidget對應壹個原生窗口。從Qt4.4開始,只有頂部的QWidget是原生窗口,而子Widget是外星人的Widget,只是壹個抽象層沒有對應原生窗口,實現了DirectUI的概念,讓很多圖形效果成為可能,比如窗口分層的透明效果。

QPA(Qt平臺抽象)是在4.8之後實現的,這使得移植Qt變得很容易。目前Qt是支持平臺最多的框架之壹。

由於前期授權的問題,Qt對開源社區不是很友好,導致推廣不理想,直到改成LGPL模式。如果Qt能早點熬過去,恐怕wxWidgets就沒有生存空間了。

QT也有壹些缺點,就是太大了,但是可以自己切。我可以在分發包壓縮後把Qt庫剪成2.5MB。

WPF,微軟在Win Form的思路上走投無路之後,終於下定決心用正確的方式開發UI庫。21世紀的UI壹定要定義,壹定不能用代碼寫。因此,使用XAML這壹強大的定義工具,您不僅可以定義UI布局,還可以包括圖形動畫效果和消息響應方法。有了優秀的語言C#,更是如虎添翼。但是,問題也很明顯,就是太龐大了。開發時不僅需要龐大的IDE和設計工具,發布的安裝包也非常龐大。所以目前很少有人和他壹起寫通用軟件客戶端,大部分都是做企業項目的時候寫專用客戶端。

大概4-5年前,我用WPF寫了壹個QQ,只實現了基本功能就比C++客戶端大很多,而且運行很慢,主要是內存消耗太大,當時WPF的優化還不充分。

最後,我想補充壹下UI庫的真正王者,可可。

蘋果的成功有很多原因,其中壹個就是可可。可可的理念很超前,很早就出來了。我懷疑Qt和WPF有很多來自可可的想法。

明確的UI,有了xib,UI的大部分細節都可以定義,並且提供了壹個所見即所得的可視化設計工具。

嚴格的MVC,而且定義非常清晰,分工明確。

Signal/slot,雖然不是這個名字叫的,但是思路是,而且真的可以通過拖動鼠標來連接。

提供了ARC、閉包和反射,給UI開發帶來了極大的便利,當然這要歸功於語言Objective-C。

加上Borland的貓頭鷹和VCL。

我開始用Borland C++3.0和Delphi 1.0。當時,Borland看起來很有前途。不幸的是,壹系列決策失誤導致公司現在幾乎消失。同學們不要再往這個坑裏跳了。

OWL曾經和MFC是競爭對手,設計思路也差不多。個人認為OWL的API設計更優雅,但是OWL在市場上被MFC徹底打敗了。

Delphi是個傑作,在RAD(快速應用開發)領域很長壹段時間都沒有對手,直到BS架構取代CS架構。Delphi的特點是簡單,開發速度快。寫壹個基本可用的應用,可能不會比Delphi快,但缺點就是醜。大部分Delphi應用程序都堆了很多控件,非常不好看。另外,由於Pascal語言的限制,無法與現有的大量C/C++代碼集成。雖然後來有了C++ Builder,但是Builder簡單快捷的優勢消失了。Borland的C++編譯器越來越差,導致開源項目不願意兼容這個編譯器。

VCL不完全是壹個UI庫,而是壹組組件接口規範,類似於COM ActiveX。Delphi和C++builder都是基於這個規範構建基本庫的。

UI庫是壹個很大的話題,可以在幾本書裏討論。我只是把自己的感受寫在這裏。

單純討論每個庫的優缺點是沒有意義的,要放到具體的應用場景中,每個庫都有自己好的場景。

如果只追求Windows下的小程序,用WTL自己實現缺點,視覺效果反而會呵呵。

如果能更大更好看,那就是Qt了。

如果妳根本不在乎尺寸,只要視覺效果華麗,就用WPF。如果把開發工具的價格也考慮進去,那麽土豪們會選擇WPF。

MFC是個雞肋,除非妳現有的工程師不能用別的,或者有歷史遺留代碼可以兼容。

如果需要跨平臺,那麽Qt、wxWidgets、GTK+相比現在的Qt沒有優勢。

如果是iOS Android,最好用原生UI庫,除非妳寫遊戲。

  • 上一篇:適合早上發的早安問候語錄。
  • 下一篇:ob過程的源代碼分析
  • copyright 2024編程學習大全網