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

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