Cross-Platform GUI Library 介紹

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

Re: Cross-Platform GUI Library 介紹 (上) (分數: 1)
評論由 zero0w 於 1月14日 (星期三) 上午07:51 貼出
(使用者資訊 |寄出訊息)http://www.geocities.com/zero0w
wxWindows 的最新版本已更新到 2.4.2:
http://www.wxwindows.org
以下是數個採用 wxWindows 作為介面 的程式:
http://audacity.sourceforge.net/
http://www.parinya.ca/
http://xchm.sourceforge.net/
這些應用程式都有跨平台的版本,像 Windows, Linux 和 Mac OS X。
更多有關 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/zero0w
freshmeat.net 另有一篇 GUI Toolkits for X-Windows 的介紹,可以參考:
http://freshmeat.net/articles/view/928/