為什么要使用wxWidgets?
wxWidgets和其它類似的GUI(圖形用戶界面,下同)庫比如 MFC或者OWL一個(gè)最本質(zhì)的區(qū)別在于,它是跨平臺的。wxWidgets提供的API函數(shù)在它支持的所有平臺上是想同的或者是非常相似的。這意味著你可 以編寫一個(gè)windows上運(yùn)行的程序,這個(gè)程序不需要經(jīng)過任何改動,或者只需要很少的改動(這種情況并不常見),只需要通過重新編譯,就可以在 Linux或者M(jìn)ax OSX上運(yùn)行。比起為另外的平臺從頭編寫代碼,這顯然有很大的好處,另外一個(gè)附帶的好處是,你不需要重新學(xué)習(xí)那個(gè)平臺的API。而且,你的程序可能在將來 很長時(shí)間仍然可以使用。因?yàn)殡S著計(jì)算機(jī)科技的演進(jìn),wxWidgets將會隨之一起演進(jìn),這樣你的程序?qū)芊奖愕囊浦驳阶钚碌牟僮飨到y(tǒng)以支持最新的特 性。
另外一個(gè)與眾不同的地方在于,wxWidgets可以給你的應(yīng)用程序提供本地觀感。一些其它的可以跨平臺的開發(fā)框架在不同的平臺 使用同樣的窗口組件代碼(譯者注:難到他指的是JAVA?),也許它會通過類似窗口主題這樣的方式來模擬本地觀感。而wxWidgets則盡可能的使用本 地的窗口控件(當(dāng)然wxWidgets也提供自己的控件集,這是另外一個(gè)話題了),所以wxWidgets的程序不只是看上去象是本操作系統(tǒng)上的原生程 序,它實(shí)際上就是原生程序。對于使用應(yīng)用程序的用戶來說,這是非常重要的,因?yàn)楹捅镜夭僮飨到y(tǒng)標(biāo)準(zhǔn)的任何一點(diǎn)細(xì)微的甚至是幾乎難以察覺的不同,都會讓他們 產(chǎn)生避而遠(yuǎn)之的想法。
讓我們來舉例說明。下圖演示了一個(gè)叫做StoryLines的小程序運(yùn)行在Windows XP上的樣子:
正 象大家看到的那樣,這是一個(gè)典型的Windows應(yīng)用程序,有典型的Windows的GUI控件例如標(biāo)簽頁,滾動條以及下拉列表。類似了,下圖演示了這個(gè) 程序在Max OSX上的樣子,正象我們期待的那樣,它有著水晶外形圖標(biāo),沒有菜單條(因?yàn)榘凑仗O果的風(fēng)格,當(dāng)前窗口的菜單條應(yīng)該顯示在屏幕的最頂層。)
最后,我們還將演示一下同樣的程序在小紅帽Linux上作為一個(gè)GTK+程序的樣子:

為什么不直接使用JAVA呢?對于基于Web的應(yīng)用來說,JAVA的確很不錯(cuò),但是對于桌面應(yīng)用程序來說,JAVA有時(shí)候并不是一個(gè)很好的選擇。一般來 講,基于C++的wxWidgets程序會運(yùn)行更快,感觀上更象本地原生程序并且更容易安裝,因?yàn)樗⒉灰蕾囉谀愕臋C(jī)器一定要有JAVA虛擬機(jī)。C++也 更容易訪問操作系統(tǒng)提供的底層函數(shù)并且更容易和已有的C++或者C代碼集成。基于以上原因,您現(xiàn)在經(jīng)常用到的桌面程序中,很少有全部基于JAVA開發(fā)的。 而wxWidgets則可以讓你開發(fā)高性能的,本地原生的應(yīng)用程序。而這可能正是你的用戶所期待的。
wxWidgets是一個(gè)開放源 代碼的項(xiàng)目。毫無疑問,這意味著使用wxWidgets是免費(fèi),它不需要額外花費(fèi)你1分錢(除非您愿意大方的向這個(gè)項(xiàng)目進(jìn)行捐助),但是,開放源代碼并不 僅僅意味著免費(fèi),它有著更重要的意義。開源項(xiàng)目通常可以持續(xù)比它的創(chuàng)建團(tuán)隊(duì)或者通常意義上的擁有者更長久的時(shí)間。使用wxWidgets開發(fā)程序,你的代 碼永遠(yuǎn)不會過時(shí),你的代碼所依賴的開發(fā)平臺永遠(yuǎn)不會消失。你可以通過直接修改源代碼來修正基礎(chǔ)庫中的問題(譯者注:使用Delphi的開發(fā)者對此可能有更 深的體會,由于眾所周知的原因,很多開發(fā)工具慢慢的被淘汰了)。你甚至可以自己抽點(diǎn)時(shí)間加入到wxWidgets的開發(fā)團(tuán)隊(duì)中來,維護(hù)其中的一部分代碼, 這也是一件非常有趣的事情。開源項(xiàng)目的團(tuán)隊(duì)成員之所以加入某個(gè)團(tuán)隊(duì)是因?yàn)樗麄儫釔鬯麄冋谧鞯氖虑椋⑶移炔患按南氚阉麄兊闹R和別人分享,而商業(yè)項(xiàng)目 的客服支持人員通常不具有這種理想主義的情節(jié),當(dāng)你使用wxWidgets開始編程時(shí),你其實(shí)是把自己放入一個(gè)令人驚訝的有藝術(shù)天賦的一堆天才中間(譯者 注:我只是按照字面意思翻譯,雖然我自己用wxWidgets開發(fā)程序,但是這樣的話還是讓我覺的有一點(diǎn)點(diǎn)善意的惡心。可能是我的英文太差了,沒有理解原 話的意思,原話是這樣的:When you use wxWidgets, you tap into an astonishing talent pool, with contributors from a wide range of backgrounds.),這些天才來自世界的各個(gè)角落,有著各種各樣的背景。開發(fā)應(yīng)用程序需要考慮的很多細(xì)節(jié)都被這些天才封裝在了你可以直接拿來很簡 單就可以使用的類中,如果不是這些天才的勞動,你可能要花費(fèi)很大的精力才能應(yīng)付。一個(gè)開放和活躍的社區(qū)將會通過郵件列表對你提供幫助,在這里,你會享受到 討論的樂趣。這些討論并不全是和wxWidgets相關(guān)的。更多情形下,你是和社區(qū)那些有經(jīng)驗(yàn)的或者沒有經(jīng)驗(yàn)的開發(fā)者進(jìn)行心靈的交流.也許有一天,你會發(fā) 現(xiàn)自己成為wxWidgets之所以成功的一分子。
wxWidgets已經(jīng)被廣泛的應(yīng)用在各種工業(yè)領(lǐng)域。它的用戶包含了象AOL, AMD,CALTECH, Lockheed Martin, NASA, the Open Source Applications Foundation, Xerox等等這些大的商業(yè)和團(tuán)體機(jī)構(gòu)。wxWidgets擁有很廣泛的使用者,從個(gè)體的軟件開發(fā)者到大的商業(yè)團(tuán)體,從計(jì)算機(jī)科學(xué)領(lǐng)域到醫(yī)療研究領(lǐng)域,從 社會生態(tài)學(xué)到電信領(lǐng)域。當(dāng)然,還有數(shù)不清的開源項(xiàng)目在使用它,例如Audacity聲音編輯項(xiàng)目和pgAdmin III數(shù)據(jù)庫設(shè)計(jì)和維護(hù)項(xiàng)目等。
人 們出于各種各樣的目的而使用wxWidgets,一些人只是把它作為單平臺開發(fā)上MFC的優(yōu)雅的替代者,一些則是為了讓他們的程序可以方便的從微軟的 Windows移植到Linux或者是蘋果的OSX。 wxWidgets還正致力于移動終端的支持,包括嵌入式linux,微軟的Pocket PC,在不久的將來還會支持Palm OS。
wxWidgets的歷史
1992年,Julian Smart在Edinburgh大學(xué)開始制作一個(gè)叫做Hardy的圖表工具的時(shí)候,為了避免其發(fā)行版本在Sun的工作站和各種PC之間作選擇,他決定使用 跨平臺的編程框架。但是當(dāng)時(shí)可選的跨平臺的編程框架不多,而他的部門也不可能給他很多的預(yù)算,所以他只能自己創(chuàng)建一個(gè)自己的跨平臺編程框架。這樣, wxWidgets 1.0誕生了。 1992年9月,學(xué)校允許他把他的wxWidgets 1.0上傳到部門的FTP服務(wù)器,因此別的一些開發(fā)者也開始使用他的代碼。最開始的時(shí)候,wxWidgets是面向XView和MFC 1.0的,由于Borland C++的適用者抱怨其對MFC的依賴,所以Julian Smart用純Win32的代碼重寫了wxWidgets。又因?yàn)閄View很快被Motif取代,很快,Widgets提供了對Motif的支持。
不 久以后,一個(gè)很小但是卻很付有激情的wxWidgets用戶社區(qū)成立了并且擁有了自己的郵件列表。大量的新代碼和補(bǔ)丁開始融入到wxWidgets中,其 中包括Markus Holzem提供的Xt的支持。wxWidgets也自然的擁有了越來越多的來自世界各地的使用者:獨(dú)立工作者,學(xué)術(shù)機(jī)構(gòu),政府機(jī)構(gòu)以及很多企業(yè)用戶等, 他們認(rèn)為wxWidgets提供的產(chǎn)品質(zhì)量和產(chǎn)品支持甚至好過他們見過的或者用過的其它商業(yè)的產(chǎn)品。
1997年,在Markus Holzem的幫助下,新版的wxWidgets 2 API問世。此時(shí),Wolfram Gloger建議應(yīng)該提供GTK+的支持。GTK+是被GNOME桌面系統(tǒng)采納的一套窗口控件。于是,Robert Roebling開始領(lǐng)導(dǎo)GTK版本的wxWidgets的開發(fā),現(xiàn)在wxWidgets的GTK版本已經(jīng)成為其在UNIX/LINUX下的最主要的版 本。到了1998年,Windows和GTK+的版本被合入版本控制工具CVS。Vadim Zeitlin加入到項(xiàng)目中來幫助管理和維護(hù)如此大量的設(shè)計(jì)和代碼,同年,Stefan Csomor開始著手增加對Mac OS的支持。
1999 年,Vaclav Slavik的令人印象深刻的wxHTML類和HTML幫助文件顯示控件被加入進(jìn)來。2000年,SciTech公司開始開發(fā)wxUniversal版 本,這個(gè)版本提供屬于wxWidgets自己的不依賴于任何其它圖形庫的窗口控件,以便支持那些沒有原生窗口控件庫的操作系統(tǒng)。wxUniversal最 初被用于SciTech公司的MGL產(chǎn)品,這個(gè)產(chǎn)品為圖形用戶界面提供了底層支持。
到了2002年,Julian Smart和Robert Roebling在wxUniversal的基礎(chǔ)上提供了wxX11版本,這個(gè)版本僅依賴于Unix和X11,因此它幾乎適用于任何的類Unix環(huán)境,所以,它可以被用在相當(dāng)?shù)讓拥南到y(tǒng)中。
2003年,wxWidgets開始了對Windows CE的支持,同年Robert Roebling在GPE嵌入式Linux平臺上演示了使用wxGTK編寫的程序。
2004年,因?yàn)槭盏轿④浀纳虡?biāo)方面的威脅,wxWidgets被迫從它原來的名字"wxWindows"改名。
同 樣是在2004年,Stefan Csomor和一大群熱心的參與者徹底的修改了wxMac OSX版本,OSX版本的功能和性能都得到了極大的提升。而David Elliot領(lǐng)導(dǎo)的小組正在穩(wěn)步的開發(fā)一個(gè)基于Cocoa的版本,William Osborne也著手開發(fā)一個(gè)可以支持wxWidgets的"minimal"例子的Palm OS 6的版本。 2005年4月,2.6版的wxWidgets發(fā)布了,幾乎所有的平臺版本在這個(gè)版本都有了大幅的改進(jìn)和提高。
wxWidgets將來的計(jì)劃包括:
- 一個(gè)包管理工具,使得集成第三方工具變得容易。
- 更好的嵌入式支持。
- 更好的事件處理機(jī)制。
- 增強(qiáng)型控件支持:比如一種捆綁了樹形控件和列表控件的控件。
- wxHTML 2提供在各種平臺下的完整的Web能力支持。
- STL標(biāo)準(zhǔn)兼容
- 完整的Palm OS支持