當前位置:外匯行情大全網 - 期貨行情 - MFC,WTL,WPF,wxWidgets,Qt,GTK各有什麽特點?

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

WTL不是壹個框架。只是用泛型將Win API層層封裝,設計思路並沒有擺脫MFC的影響。事實上,它使用泛型作為UI。

框架只能算是壹種行為藝術,繼續發展下去就變得沒用了,比如代碼太復雜,編譯太慢,調試難解決。

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

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

MS-VisualC++的類庫(Microsoft Foundation Class的縮寫)

是更高級的Win API包,比WTL包更徹底,很難看到HWND。

HDC還提供了許多實用程序類,如高級控件、通用容器、IO訪問、網絡協議等等。此外,它還提供了壹些基本框架,如

Document/View是MVC的簡化版,只有MV,但在數據管理和消息傳輸上沒有約束,導致了Doc/View的亂用。

媽的。尤其是對於事件處理模型,消息映射是壹種簡單且容易出錯的方式,其唯壹的優點就是性能好。來自VC++

MFC在1應運而生。x當時整個UI社區的設計思路都比較落後(蘋果除外),MFC背負著沈重的兼容包袱,比如vc++。

1.52的MFC程序在vc2003中稍加修改就可以編譯,導致MFC後期沒有開發,只是沿著舊的思路改進了壹些細節,增加了壹些組件,但是有了壹個根本性的設計。

問題沒有改善。

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

wxWidgets,

這基本上是壹個跨平臺的MFC,抽象了不同平臺之間的差異。其實大部分後端都是平臺原生API實現的,很多控件都是系統直接原生的。有

wxWidgets用於

GTK+的版本,後端是GTK+,wxWidgets是外殼。這也是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,

微軟贏了

在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徹底打敗了。

德爾斐

堪稱傑作,在RAD(快速應用開發)領域很長壹段時間都沒有對手,直到BS架構取代CS架構。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庫,除非妳寫遊戲。

  • 上一篇:Markdown是什麽意思?
  • 下一篇:期貨賺錢是真的還是假的?
  • copyright 2024外匯行情大全網