Cross-Platform GUI Library 介紹(上)zz- -
文章摘自:
http://www.linuxhall.org/modules.php?name=News&file=article&sid=112談到 Cross-Platform Programming, 很多人會(huì )自然的想起 Java 。Java 風(fēng)令人人都起了篇寫(xiě) Cross-Platform (跨平臺) 程式的念頭,沒(méi)錯, Java 的確能夠 "Compile once, run everywhere",但其執行速度不能令人接受。所以如何用傳統的C++ 篇寫(xiě)Cross- Platform 的程式仍有其存在的意義。
在Linux 中用 C / C++ 篇寫(xiě)的程式絕大部分能夠不經(jīng)大量修改也能夠在 Windows 中篇譯並運行得很好 -- 除了 Socket 和一些有使用圖像介面的程式外。在很多介紹 WinSock 的書(shū)中都有一些如 "Converting BSD Socket to WinSock" 的文章。但如何把 WinAPI 寫(xiě)成的程式的 GUI 改成使用 GTK / QT 的程式呢? 這倒是不簡(jiǎn)單的問(wèn)題。因此便出現了很多 "Cross- Platform GUI Library" 了。它們都能夠讓大家不需要修改有關(guān) GUI 介面的 Coding, 便能夠在不同的 Platform 下篇釋/使用。 最廣為人知的大概是 Mozilla 自己的 Framework 吧!它們?yōu)榱朔奖阕约旱某淌皆诓煌钠脚_下使用,而設計了自己的 "Framework"。Mozilla 的 XP Tools Kit 最為先進(jìn)的地方是它支援了如 XML 和 Javascript 之類(lèi)的 Standard,方便了設計介面。
但是如果讀者打算自己篇寫(xiě)小程式,要在多個(gè)平臺下篇譯的話(huà),大概沒(méi)理由要自己重新篇寫(xiě)一套 Framework 吧。網(wǎng)上有不少 Cross-Platform 的 Framework ,讓筆者在此向大家介紹一些出名的 Framework 吧!
wxWindows
wxWindows 是於1992 年由 Artifical Intelligence Application Intitute 的 Julian 篇寫(xiě)的,現在最新版本為 2.2.5,使用 C++ 。
它是一套能夠讓你篇寫(xiě)的程式不經(jīng)大量修改也能夠在多平臺下篇釋的 Framework,更特別的是它能夠讓程式擁有 "native looks" -- 即是使用了該 platform 自己的物件如 button ,而不少 Framework 的程式外觀(guān)在不同的 platform 下也會(huì )一樣,結果可能在 Windows 執行時(shí)使用和 Windows 完全不同的 Control (舉一個(gè)例子而已!) ,那看起來(lái)便會(huì )是怪怪的了。 wxWindows 分別支援:Windows 3.1, Windows 95/98/Me, Windows NT, Linux / Unix GTK , Motif, MacOS, Python, 而且也已經(jīng)有了初版的 wxPerl。其網(wǎng)頁(yè)更表示正在開(kāi)發(fā)BeOS 和 Windows CE 的版本,而 wxGTK 和 wxMotif 也可以在 OS/2 中篇釋?zhuān)信d趣的讀者可到以下網(wǎng)頁(yè)下載:
wxWindows(2.2.5) ftp://www.remstar.com/pub/wxwin/2.2.5/wxMSW-2.2.5-setup.zip
wxGTK(2.2.5) ftp://www.remstar.com/pub/wxwin/2.2.5/wxGTK-2.2.5.tar.gz
wxMotif(2.2.1) ftp://www.remstar.com/pub/wxwin/2.2.1/wxMotif-2.2.1.tgz
wxMac(1.0) http://www.wxwindows.org/dl_mac.htm
wxPython http://wxpython.org/download.php
如果需要更加關(guān)於 wxWindows 的資訊亦可到他們的網(wǎng)頁(yè)瀏灠:
http://www.wxwindows.org
wxWindows 1 使用了 BSD 版權,而最新的版本使用了自己的 "wxWindows license" wxWindows license 基本上和 LGPL 差不多,所以大家可以放心使用 wxWindows 篇寫(xiě)自己的程式, 不論是 Open sources 或是不 open sources, 免費還是收費的。
最特別的是, wxWindows 提供了大量 Classes,不單止在 GUI 上盡量做到不需要修改便能夠在不同的平臺上 compile, 也提供了如 wxString、wxSocketClient、wxHTTP、wxTCPServer、wxFile、wxDB 還有 wxHTML! 總之你想得到的物件它亦已經(jīng)提供了 (OpenGL 也有, wxXML 也可以下載了)。 只要你熟識 wxWindows 的用法,篇寫(xiě)多平臺程式絕對不難。
wxWindows 也提供了不少 Tools 如 Dialog Editor 可以讓你只是 Drap & Drop 般設計 Dialog;gettext-win32 提供在 Win32 platform 中使用 GetText ;wxDesigner (要錢(qián)的) 可以以 RAD 型式設計 wxWindows 的應用程式 (筆者試用過(guò)感覺(jué)上並不太好)。還有很多很多的元件可以在網(wǎng)上下載。
至於程式運行速度方面,有一套十分好用的 Email Client 程式 Mahogany 便是使用 wxWindows 的了,使用它時(shí)也不感覺(jué)到比用GTK 寫(xiě)的程式慢。
筆者將會(huì )於下期詳細介紹 wxWindows 的特點(diǎn)和討論如何使用 wxWindows 篇寫(xiě)程式。
OpenAmulet
OpenAmulet 是來(lái)自 Amulet 的,也是使用 C++ 作為其篇寫(xiě)語(yǔ)言。支援的平臺為 Unix / Linux, Windows 95/98/ME/NT/2000, 也支援 Mac。它的特別之處為提供了 animation, UNDO 等動(dòng)作的內部支援。 也可以使用 OpenGL。 OpenAmulet 的最新版本為 4.3 可於以下網(wǎng)址下載:
http://www.openip.org/oa_download_r.html
和 wxWindows 一樣, 它的 Library 也能夠以 Dynamic 或static 的型式存在。關(guān)於 OpenAmulet 的詳細資料, 可以於到其網(wǎng)頁(yè)瀏灠:
http://www.openip.org/index.html
Coral (ctGUI)
Coral 是一個(gè)收集了很多library 的Framework 。使用了Artistic License。支援的平臺有 Solaris 2.x、Iris 6.x、HPUX 10.x、Linux、Windows95/98/Me/NT/2000。除了關(guān)於 GUI 方面的 Class 外它也有一些如 ctNET 和支援 Multithread 的 Classes, 對於跨平臺篇程也是很有幫助的。
Coral 可於以下網(wǎng)址下載: http://www.imonk.com/download.html
The GLOW Toolkit
GLOW Toolkit 的全名為 openGL Object-oriented Windowing toolkit,它基本上是把 GLUT 包裝起來(lái)的加強版,而 GLUT 的 GUI 竟然是用 openGL Render 出來(lái)的 (??!) 。不知道大家有沒(méi)有興趣用用這個(gè) "先進(jìn)的套件" (用 OpenGL render 整個(gè) windows出來(lái), 筆者見(jiàn)識淺以往想都沒(méi)想過(guò)。) 由於是用 OpenGL 的關(guān)係, 基本上所有能夠使用 OpenGL 的 Platform 也能使用 GLOW Toolkit 的。
The GLOW Toolkit 可於以下網(wǎng)頁(yè)下載:(最新版本為1.0.4)
http://www.ugcs.caltech.edu/~dazuma/glow/index.html
而 GLUI (使用 C 的) 可於以下網(wǎng)頁(yè)下載:
http://www.cs.unc.edu/~rademach/glui/
XP ToolKit
XPToolkit 又名為 Xpfe。大家有用過(guò)Mozilla 嗎? Mozila 是一個(gè)由 Netscape 公司發(fā)展的開(kāi)放原始碼瀏灠器。相信讀者不論在 Windows 或是 Linux 也有用過(guò)吧! 現在連 BeOS 版也有了。它又不是用 Java 篇寫(xiě)的(但運行起來(lái)倒是像 Java 一樣慢)如何做到 cross-platform?他們是使用什麼 Framework 的? 那便是 XPToolkit Project 了(哈哈, 應該說(shuō) XPToolkit 是 Mozilla 的副產(chǎn)品吧!)。
XPToolkit 的首頁(yè)在:
http://www.mozilla.org/xpfe
XPToolkit 不止是一個(gè) Crossplatform GUI framework, 也是一個(gè)全新的 User Interface 概念。它使用了如 XML , CSS 和一些如 Gecko , XPConnect 等技術(shù)來(lái)讓程式設計者可以盡量減少為不同的平臺篇寫(xiě)其專(zhuān)有的程式碼。簡(jiǎn)單來(lái)說(shuō)便是希望盡量讓那些程式碼可以 cross- platform 了。 正如他們的網(wǎng)頁(yè)所說(shuō) : "We make cross-platform user interfaces as easy to build and customize as web pages" 。所有的 User Interface 都是用一些 XML file 儲存起來(lái),那麼建造 User Interface 便變得容易起來(lái)。XPToolkit 使用 XUL和 HTML 來(lái)實(shí)作 User Interface。XUL 全名為 XML-based User Interface Language。它提供了不少物件如 menu bar, toolsbars, buttons 之類(lèi)。XPToolkit 暫時(shí)最大的應用範圍當然是 Mozilla 本身。大家如果有留意 mozilla 網(wǎng)頁(yè)的介紹,也會(huì )知道 mozilla 本身也是一個(gè)網(wǎng)頁(yè),也是由 Gecko render 出來(lái)的,所以大家也可以輕易建做自己的 "Netscape 6"。至於如何建做自己的 Mozilla skins 暫時(shí)在此不提。
各位可以試試在 mozilla 開(kāi) [mozilla 's path]/chrome/comm/content/navigator/navigator.xul, 你會(huì )發(fā)覺(jué)自己在 mozilla 中開(kāi)多了一個(gè) mozilla 出來(lái) ^o^ )
哈哈,原來(lái) mozilla 本身也是一個(gè)網(wǎng)頁(yè),那又有什麼特別呢? 特別之處便是以後那些應用程式可以用 XUL 寫(xiě)出來(lái),然後用 Gecko engine 執行,就像 .NET 概念一樣是 web-based applica tion,程式是從網(wǎng)上下載來(lái)用的(其實(shí)筆者認為暫時(shí)那技術(shù)仍未成熟,至少未有良好的篇程語(yǔ)言),暫時(shí)在 XUL 中可以使用 Javascript 篇程,但筆者相信將來(lái)必定會(huì )有良好的解決方案,會(huì )有較完整的程式語(yǔ)言可以在 XUL 中使用,(不會(huì )是C# 吧!..) 只要有了一個(gè)良好的程式語(yǔ)言可以使用,那麼使用 XUL 來(lái)寫(xiě)網(wǎng)路上的應用程式也就不是不可能了。(現在也的而且確有一些使用 XUL 的 project 正在進(jìn)行呀!)
實(shí)在是十分令人期待呢~!
關(guān)於 XUL 篇程的計劃: http://www.mozdev.org
Tk
相信大家也有聽(tīng)過(guò) Tk 的大名吧! Tk 是一個(gè)如 GTK / Qt 般的 Framework 。它提供了不少 widg et 予程式用,它本身是設計來(lái)用於 TCL 中的?,F在它可以運行於 Linux (UNIX) X-Windows, Windows 95/98/ME/2000 或是 Mac中。Tk 通常不會(huì )在 C 或 C++ 中運用,而是用於一些 Scriptin g Language 中例如 TCL, Perl。Tk 本身非常簡(jiǎn)單,如以下一例子: (使用 perl)
#!/usr/bin/perl use Tk; $top = new MainWindow; MainLoop();
V
V 是一個(gè)由Dr. Bruce Wampler 所設計的 Framework,和 wxWindows 一樣使用了 LGPL,也提供了 "natvie looks",能夠運行於 Windows 3.1/95/98/ME/NT4/2000, X-Windows 和 OS/2。和 wxWindows 一樣它也是使用 C++ 作為篇程語(yǔ)言,但它並沒(méi)有如 wxWindows 般附加了那麼多物件如 wxHTML。它的網(wǎng)頁(yè)說(shuō)那是為了保持這 Framework 簡(jiǎn)簡(jiǎn)單單。V 的網(wǎng)址是:
http://www.objectcentral.com/vgui/vgui.htm
筆者個(gè)人認為 V 和 wxWindows 十分的相似,但是看起來(lái)比較遜色,沒(méi)有提供更多的 object 可使用,但看上去 V 的codeing 是比較容易明白和學(xué)習的。
Zinc
Zinc 是由一家叫 WindRiver 的公司開(kāi)發(fā),他們主要是作 Embedded System 的業(yè)務(wù),可能就是這個(gè)原因所以 Zinc 也非常特別地有 Embedded System 的版本。它可以免費下載,Zinc 有兩個(gè)版本:Zinc for Desktop 和 Zinc for Embedded。 Zinc For Embedded 主要是用於一個(gè)叫 VxWorks 的 Operating System 上。Zinc 看來(lái)是把目標定為支援更多的 OS,所以它不只有 Support Embedded System 的版本,還有 Zinc For Desktop 支援了 MS-DOS(???), Window s 3.1/95/98/ME/NT4/2000, X/Motif, pSOS (筆者也不知道是什麼),和 support unicode。 另一方面它也有一個(gè)叫 Zinc Designer 的 GUI Builder,含有源始碼,可以讓大家視覺(jué)化地篇程。
zinc 的網(wǎng)址是在:http://wrs.com/zinc
GTK 和 Qt?
GTK 和 Qt 這兩大 framework 相信讀者也有聽(tīng)說(shuō)過(guò)吧! Gnome 和 KDE 便是用它們寫(xiě)成的了!大部分運行於 X-Windows 的程式都是使用它們作 Framework 的,那麼又能不能直接把現成的 GTK (或 Qt) 的程式搬到 Windows 或其他 Platform 下使用呢? 唔.... 當然是有這些 Project 正在進(jìn)行啦! 但使用起來(lái)沒(méi)有 wxWindows 這類(lèi) Framework 方便。(當然了,它們本來(lái)便是設計成 Crossplatform GUI Framework!)
GTK 暫時(shí)有兩個(gè)計劃把自己 port 到 Windows 和 BeOS 去。關(guān)於Windows 的那個(gè)計劃其實(shí)便是把 GIMP port 到去 Windows 使用的了! GTK 名叫 GIMP Tool Kit,要 port GIMP 到 Windows,當然要把 GTK 都 port 過(guò)去吧! ^o^ 但筆者試過(guò)把自己寫(xiě)的小程式 port 到去 Windows 還不是經(jīng)常成功,用 Cygnus 更是不方便了。 而且該計劃暫時(shí)只是由 Tor Lillqvist 在空閒時(shí)篇寫(xiě) ( 網(wǎng)頁(yè)上他說(shuō)此計劃是因為 Linux 不支援他用的 Scanner,所以才要 port 到去 Windows 上用 ^o ^),所以不是十分完整便是必然的了。
GTK+ For Windows 的網(wǎng)址:http://user.sgic.fi/~tml/gimp/win32/
而 GTK+ For BeOS 更是只處於 Alpha 階段。由 Shawn T. Amundson 和 James Mitchell 負責。筆者也沒(méi)有試用過(guò),所以不能為大家作介紹了。
至於 Qt 聽(tīng)說(shuō)在 Crossplatform 的porting 方面是比較好的。因為 Qt 本身除了在 Linux ( 或其他 UNIX) 上用外,還 support Windows 95/98/ME/NT4/2000 。(怎麼說(shuō) Qt 也是商業(yè)產(chǎn)品,確是與別不同。)
而且比較起 Gtk,Qt 也有更多的 Development Tools。例如最出名的 KDeveloper,或是 Qt Designer。相比之下 Gtk 最好的便是 Glade 了,而 Glade 並沒(méi)有與 Code Editor 整合 (GIDE 又的功能暫時(shí)只是非常簡(jiǎn)單)
和 Zinc 一樣, Qt 也有其 Embedded 版本,更聲稱(chēng)可以把那程式放在一個(gè) 800kb - 3MB 的 Rom 中執行,還有一個(gè)名為 Qt/PalmTop 的系統,看上去很美麗呢!
Qt 正如大家所知道是有 Free Edition 的,所以 Qt , Qt/Embedded 和 Qt/PalmTop 都是可以免費下載的,最近 Qt 除了免費外還使用了 GPL License,實(shí)在是一眾 KDE 使用者所期待的消息。 但可惜的是除了 Qt For Linux 外 Qt For Windows 並不是免費的,要不然可能 Qt 會(huì )是最好的 Crossplatform GUI Framework 了吧! (是筆者錯了嗎? 如果你有辦法免費用到 Qt For Windows 的話(huà)請來(lái)信,筆者必定會(huì )於下期告知大家,呵呵)
筆者個(gè)人比較喜歡 GTK 而討厭 Qt,但無(wú)可否認在 Crossplatform 方面 Qt 是做的比較好。
關(guān)於 Pascal 的Cross-platform Programming (Kylix)
為什麼筆者在此要特別介紹 Kylix 呢? Kylix 是由 Borland 公司所研發(fā)的一套 RAD Developnm ent Tools。 Borland 公司給人的印象是主力開(kāi)發(fā) Developnment Tools 的,而他們在 Win32 下的產(chǎn)品也有輝煌的成積,如早期的 Turbo Pascal, Turbo C 到號稱(chēng) "VB 殺手" 的Delphi 和 Borland C++ Builder。 所以當 Borland 公司宣佈 Kylix 時(shí)筆者也非常興奮。
Kylix 的網(wǎng)址是: http://www.borland.com/kylix
筆者沒(méi)有使用過(guò) Kylix(此稿出刊時(shí) Kylix 應該已正式推出了),Borland 公司稱(chēng) Kylix 將會(huì )和 Delphi 的介面差不多,可以想像它會(huì )令到 Linux Programming 如何的簡(jiǎn)單。較為可惜的是它會(huì )使用 Qt (至少筆者覺(jué)得 Qt 不好)。說(shuō)到用Qt 的 Visual Developnment Tools, 雖然已經(jīng)有好幾個(gè),但是 Kylix 卻擁有一些其他 Development Tools 沒(méi)布的特點(diǎn),如 Kylix 會(huì )和 Delphi 一樣有完整的 Database 支援, 稱(chēng)作 DBExpress, Kylix 也聲稱(chēng)支援 Apache。
Kylix 使用一種名為 CLX 的架構,特別之處是因為 Kylix 和 Delphi 極為相似 (Kylix 的網(wǎng)站上寫(xiě)著(zhù) : Delphi Competiable),而 VCL 的元件也可以 port 到 CLX 去。所以以往在 Windows 中用 Delphi 寫(xiě)的軟件便可以不需大覆更動(dòng)在 Kylix 上篇譯。也可以吸引到 Visual Basic 的開(kāi)發(fā)者改到 Linux 平臺上用 Kylix。
各位也不用怕沒(méi)有CLX 的元件可用,除了 Borland 本身已有百多個(gè)元件外,一些公司例如 IP* Work 也已經(jīng)推出自己的元件 For Linux 版本,看來(lái)大家對 Kylix 也有所準備呢!
Kylix 暫時(shí)是用 Pascal 的,希望 C++ 的版本會(huì )盡快推出吧! 如果各位對 kylix 有興趣,當然可以到 Borland 的網(wǎng)站訂購了。
總結
上文介紹了不少 Crossplatform GUI Framework,都只是一少數而已,各位如有興趣,也可以到網(wǎng)上找找看,可能會(huì )找到個(gè)更好 的Framework 呢! 以上介紹的 Framework 都各有特色。特別是 GLOW , XPToolKit 和 Kylix 的 CLX。GLOW 特別之處是用 OpenGL 來(lái) Render 出那些 Cont rol,但實(shí)用與否則見(jiàn)人見(jiàn)志。XPToolkit 更是全新技術(shù),運用 XUL 和 CSS 可以做出的萬(wàn)千變化,也十分吸引,沒(méi)想到 Javascript 也可以這麼複雜 ^o^。 最後的 Kylix 和它使用的 CLX,則是大公司的產(chǎn)品,相信功能方面必然是一流,但當然也是要錢(qián)的了,而且其易用性更是適合初學(xué)者進(jìn)入 Linux 篇程的大門(mén)呢!
至於 GTK 和 Qt 的移植,看來(lái)是 Qt 做的比較好,可惜 Qt For Windows 是要錢(qián)的,對於本身是免費的程式使用 Qt For Windows 作移植便更不可接受了。 但 GTK 的移植又不是做得很好??磥?lái)如果所設計的程式是偏重於移植性還是使用一些 Framework 比較好。
筆者推介大家使用 wxWindows 這套 Framework,因為它除了有很多 GUI 介面的 Framework 外,也有一些如 MDI 之類(lèi)的 Support,這點(diǎn)還不夠特別,它還提供了很多方便篇程的元件,如 wxHTML 可以顯示網(wǎng)頁(yè) ;wxConfigBase 可以讓你的程式在 Linux 下會(huì )把 Config File 寫(xiě)進(jìn) .xx 之類(lèi)的 file 而在 Windows 下又會(huì )寫(xiě)進(jìn) Registery; wxDb 提供了資料庫功能 ;wxDllLoader 可以簡(jiǎn)易地使用 Shared Library。而 wxWindows 本身也有其他人為它寫(xiě)上更多的元件,其說(shuō)明文件也很清楚易明(筆者只用了半小時(shí)便寫(xiě)起程式來(lái))。所以筆者將會(huì )在下個(gè)月的文章教授 wx Windows 的基礎技巧,各位有興趣的讀者請留意啦!
Chpapa ()
原文在 LinuxHall 第 8 期刊載
Re: Cross-Platform GUI Library 介紹 (上) (分數: 1)
評論由 zero0w 於 1月14日 (星期三) 上午07:51 貼出
(
使用者資訊 |
寄出訊息)
http://www.geocities.com/zero0wwxWindows 的最新版本已更新到 2.4.2:
http://www.wxwindows.org
以下是數個(gè)採用 wxWindows 作為介面 的程式:
http://audacity.sourceforge.net/
http://www.parinya.ca/
http://xchm.sourceforge.net/
這些應用程式都有跨平臺的版本,像 Windows, Linux 和 Mac OS X。
更多有關(guān) wxWindows 的資料請參看 其 OpenOffice Impress 的 presentation:
http://www.wxwindows.org/docs.htm#presentations
非常期待下篇「文章教授 wx Windows 的基礎技巧」,謝謝。
Re: Cross-Platform GUI Library 介紹 (上) (分數: 1)
評論由 zero0w 於 1月15日 (星期四) 上午06:06 貼出
(
使用者資訊 |
寄出訊息)
http://www.geocities.com/zero0wfreshmeat.net 另有一篇 GUI Toolkits for X-Windows 的介紹,可以參考:
http://freshmeat.net/articles/view/928/