![[ 永远的UNIX::UNIX技术资料的宝库 ]](/images/title.gif)
|
| 首页 > 编程技术 > 其它 > 正文 |
 |
| X-Window 编程 API |
| http://www.fanqiang.com (2001-06-08 11:00:01) |
2000/03/04 By maa
--------------------------------------------------------------------------------
Introduction
随着 KDE、GNOME 的流行,来多人开始习惯一启动 GNU/Linux,就在这种图形化使用者介面环境下作业。在慢慢熟悉窗外的世界後,你可曾想过,自己也尝试来写个 X Window 的应用程式?在这篇文章中,我们将带你一探 X programming 的路途,并让你看看在 X 世界中,各种多彩多姿的图形介面函式库。
首先,我得先让你知道很重要的一点:和 Microsoft Windows 这种每个窗子都长得一模一样的制式化系统不同,在 X Window 的世界中,有超过你想像中多的 APIs (Application Programming Interfaces) 和图形介面函式库;搭配不同的函式库,就会让你的应用程式呈现不一样的风貌。如果你有仔细注意 KDE 和 GNOME 的软体,应该不难看出他们之间有甚麽差异。
The Layered X Programming APIs
「一张图胜过千言万语」,我想咱们就直接从底下这张「The Layered X Programming APIs」一图开始吧。(:这张图是我参考一些文件画的,可能不是很正确,如果前辈觉得有不妥的地方,请来信告知!^_^ )
The Layered X Programming APIs
可别被这张图给吓到,我只是想让你知道「要写一个 X Window 的应用程式,其实有好多条路可以走 」。
这张图是这样的,上头的「X Applications」也就是我们的应用程式,可以使用各种 APIs 和图形介面函式库 (图中的方块),透过 X Protocol (Network Connection) 来和 X Server 连线沟通。 Appilication 可以用 Motif,或是 KDE、Qt、Gnome、GTK、PerlTK…甚或最底层的 XLib 等任何一种「函式库」来写。而方块叠在方块之上的或是被箭头指着的,代表着上层的方块是「基於」下层的方块衍生而来,比如 Motif 以 Xt 为基础,或是 KDE 以 Qt 为基础以及 GNOME 是以 GTK 为基础衍生而来。
了解这张图怎麽看後,底下就开始解释这张图各元素所代表的意义:
The X Library (Xlib)
The X Library 是 X Window 程式最低阶的程式设计介面,如果拿来和 Windows 比较起来,Xlib 就和 Windows APIs (或称 Windows SDK) 一样,算是最接近 X Server 的程设介面,它只提供最基本的缯图和讯息事件的处理。
由於 Xlib 只能使用 C/C++ 语言来写,程式的撰写比较低阶杂。因此後来就有将 Xlib 包装简化 (抽象一些) 的函式库出现,让 X Application 的撰写变得比较容易。
X GUI Toolkits
X Toolkit Intrinsics (Xt)
Xt 是第一个把 Xlib 包装成更抽象化的函式库,它提供了「物件导向」的程式设计架构,并且引进了一种称为「widget」的概念,这种「widget」资料结构也就是所谓的「User Interface Componets」像是 menus、buttons 或是 TextBox 等 widgets。从此以後程式设计师就可以用 widget 的观念,来架构我们的应用程式,让程式变得简单且容易了解。
不过 Xt 只定义了应用程式要如何和这些 widgets 沟通,并没有规定这些 widgets 的外观要长甚麽模样。这些 widgets 真正的样子最後还是得靠更高层的函式库来处理。 (通常提供 widgets 的函式库,我们就称之为 X ToolKits)。
接下要继续讲的 Motif、OpenLook 和 Lesstif 等便都是从 Xt Library 衍生而来的图形介面函式库。为了方便起见,我们将这些图形介面函式库以 GUI Toolkit 来代替之 (也可叫 X Toolkit)。(还有一个 Athena Toolkit 也是衍生自 Xt Library,只是我实在找不到它的资料,而且也听说 Athena Toolkit 的 Widget Set 不太好看,所以就省略了!)
其实 Microsoft Windows 也是有自己一套 GUI Toolkit,只不过没人知道这套 GUI Toolkit 的名字,而且它已经是制式化的了,所以就不是那麽重要了。
Motif
Motif 为目前最主要的 GUI Toolkit,它便是以 Xt 的 widget 概念为基础,提供外观和 Microsoft Windows 95 极为类似的图形介面。Motif 是由 Open Group (以前叫 Open Software Foundation) 所出产。
不过现在的 Motif 已经不只是单纯的 GUI Toolkit 了,它也包含了一个 Motif window manager 用来管理 X Clients (X Applications)。
底下的表格列出目前可供辅助 Motif GUI Toolkit 做 X Applications 图形介面设计的工具 (我会尽量将该工具的特徵也一列在括弧中):
Supported GUI Builders
BX Pro
http://linux.ics.com/
LessTif
Lesstif 是模仿 Motif 的 toolkit, 它是个自由软体,您可以在网路中自由/免费地取得它。它发展的动机是因为要使用 Motif 必须付费或取得授权,然而目前仍有许多 X-Window 软体是基於 Motif 写成的,故才由一群有志之士发展了这一套 Motif 的替代品。LessTif 还在持续开发之中,至 1999 年底,LessTif 原始码相容於 Motif1.2 版的规格,而 Motif 现在则是 2.1.20 版。
OpenLook
另一个 Xt-based 的 GUI Toolkit,由 Sun Microsystems 和 AT&T 所发展。由於 OpenLook 和 Motif 的相继出现,Unix 系统曾经有好一段时间,一直处在介面标准的争战之中,原因就是因为 OpenLook 和 Motif 分别提供完全不一样的介面风格。後来终於在 Sun Microsystem 决定采用了 Motif 当标准 GUI 介面,才结束了这场战争。
Xforms
Xforms 亦是建立在 Xlib 基础上的一套 X Window System GUI toolkit。
TCl/TK
TCL (成 "tickle") 为 Tool Command Language 的缩写,TCL 是一个文字处理用的语言。TK (含成 "tee-kay") 则是用来延伸 TCL,让 TCL 有能力处理图形使用者介面的 GUI Toolkit。
Supported GUI Builders
SpecTCL
http://www.scriptics.com/products/spectcl/
Perl/Tk (ptk)
顾名思义,可以知道它是用 Perl 这套程式语言所实作出来的 Tk GUI Toolkit。以 Perl 的语法简洁特性和惊人的发展速度来看,使用 Perl/Tk 的人应该不比用 TCL/Tk 来得少。
Supported GUI Builders
SpecPerl
http://www.keck.ucsf.edu/~kvale/specperl.html
QtTM
QtTM (发音和 "cute" 相同) 也是一套 GUI Toolki ,比较特别的是它是用 C++ 语言写成,并且目前 GNU/Linux KDE 就是以 Qt 当基本的 GUI Library 继续衍生。同时 Qt 也是一套跨平台的函式库,用 Qt 写成的软体,可以很轻松地移殖到 X Window 或 Microsoft Windows 平台。只不过,要特别注意 License 的问题,Qt 在 Linux 是可免费使用,但在 Windows 平台可就有点不同。
(现在也有 PerlQt 这个模组,让习惯用 Perl 语言的人来写 Qt 的程式!你可以在 Perl CPAN 中找到 PerlQt!)
Supported GUI Builders
QtEZ (Project Manager、Source Editor、Menu Editor、Signal/Slot Editor、Attribute Editor)
http://www.ibl.sk/qtez/
EBuilder (Design Editor、Signal/Slot Editor)
http://www.phys.uu.nl/~meer/Ebuilder/
Qt Architect (Dialog Editor)
http://www.qtarch.intranova.net/
KDE
KDE Project 是建立在 Qt 之上的函式库。除此之外,KDE 的目标是要在 GNU/Linux 系统上建立一个和 Common Desktop Environment 一样的整合图形介面使用环境;所以 KDE 还包含了 Window Manager 、Desktop Manager,同时还附有一堆 KDE 的软体。
Supported GUI Builders
QtEZ (Project Manager、Source Editor、Menu Editor、Signal/Slot Editor、Attribute Editor)
http://www.ibl.sk/qtez/
Kdevelop (Project Manager、Source Editor、Dialog Editor、Class Viewer、Application Wizard、Class Generator、Documentation Browser)
Kdevelop 整个环境的操作感觉和 Microsoft Visual C++ 非常类似。
http://www.kdevelop.org/
KDE studio (Project Manager、Source Editor、Dialog Editor、FormBuilder)
http://www.softarc.com/~msharkey/kdestudio
GTK
GTK+ (GIMP Tool Kit) 也是一套 GUI ToolKit (以 C 语言为程设介面),可用来建立 X Window System 以图形为基础 (GUI-based) 的应用程式。一开始 GTK+ 是写来给 GIMP (GNU Image Manipulation Program) 图形处理软体使用的。现在普遍使用於 GNOME 和各种软体。
目前 GTK+ 有非常多种语言支援,如 C++ 的 Gtk--、Perl-GTK+、Python-GTK+ 等等 (可至 GTK+ 网站中找到其它语言的资讯),而且也有不少的设计工具可以辅助开发以 GTK+ 为介面的程式。
Supported GUI Builders
Glade (Project Manager、Palette Window、Property Window)
Glade 预设会产生 C 原始码,可搭配其它支援 XML 的工具来产生不同语言的程式码。
http://glade.pn.org/
GRAD (Project Manager、Source Editor、Visual Editor、Debuger)
类似 Delphi 、 Borland C++ Builder 的 RAD Tool。
http://grad.penguin.cz/
VDKBuilder (Project Manager、Source Editor、GUI Editor、Widget Inspector)
http://www.programmers.net/artic/Motta/vdkbuilder/index.htm
Perl Composer (Project manager、Code Editor、Property Editor、Form Viewer、Palette)
这 wycc (王佑中先生) 前辈力推的 Perl/GTK GUI Builder,目标是建立一 Visual Basic like 的开发环境)
http://linux.ece.uci.edu/~wangy/VisualPerl/vperl.html
GNOME
GNOME (GNU Network Object Model Environment) 为以 GTK 为基础的图形介面函式库.。和 KDE 一样,GNOME 也是以建立一个完整、友善的图形使用环境为目标,并提供 GNOME 相关的软体。
Supported GUI Builders
Glade (Project Manager、Palette Window、Property Window)
Glade 预设会产生 C 原始码,可搭配其它支援 XML 的工具来产生不同语言的程式码。
http://glade.pn.org/
Java AWT 、JFC
Java AWT toolkit (Abstract Window Toolkit) 与 Java Foundation Class (JFC) components 为 Java 的图形介面类别库,可以让程式设计师撰写 GUI 程式,只要有支援 Java 的作业平台就可执行。
Supported GUI Builders
JBuilder Foundation
http://www.inprise.com/jbuilder/foundation/
结语
如果你是第一次接触 X Programming,也许也会和我一样让这麽多的 GUI Library 弄得眼花燎乱;不过至少在看完本文之後,你应该已经有了一些重要的观念:第一就是你可以选择纯手工,用 Xlib 这个最低阶的 C 程设介面来写 X 程式;或是从琳珑满目的「GUI Toolkit」,选其中一套来写 X 程式 (这边最主要就是你得以 Widget 的概念来写 X 程式!)。
至於到底该选择哪一套函式库比较好,并没有一定的说法,必须看自己的需求而定,比如较拿手的程式语言、让你觉得较舒服的图形介面,或者是有不可抗拒的理由,比如现在 GNU/Linux 以 KDE 和 GNOME 为主流,所以用 Qt+KDE 或是 GTK+ GNOME 来开发程式,应该是不错的选择!
另外,现在用来辅助这些 GUI Libraries 来设计程式的工具也来多:比如有 C/C++ IDE 整合环境 Kdevelop、VDK (Visual Development Kit)、gIDE 或是给 Java 用的 JBuilder、Perl 用的 Perl Composer 或 Perl Builder、Python 用的 Python Builder,还有给 GTK+ 和 GNOME 用的介面程式产生器 Glade 等等。
只要我们先对这些 GUI Toolkits 先做过通盘的了解,并针对一两套 GUI Toolkits 打好札实的基础 (不用工具帮我们写程式),到时後再配上这些方便的工具,想要在 X Window System 上写写简单的程式应该就不是难事了。
PS: 我也只是收集比较常听到的 GUI Toolkits 资料,在 X 世界还有好多 GUI Toolkits 都没列出来,这部份就请看 References 中的网站资源了。
References
参考文件:
Kenton Lee: X Programming Model
http://www.rahul.net/kenton/txa/jun95.html
Virtual Domicile of Steven K. Baum (各种 GUI Library 资料整理)。
http://stommel.tamu.edu/~baum/ocean_graphics.html
Jeff Pitchers- X Window Guide
http://formast.lut.ac.uk/ASlab/info/usage/X-doc/XwindowGuide/doc.html
Glade 入门介绍
http://mmlab.im.fju.edu.tw/~maa/xwindow/2000/2000010201.htm
其它工具和相关网站:
Kenton Lee X Window System Consulting (非常非常非常丰富的 X 资讯网)
http://www.rahul.net/kenton/index.shtml
谢东翰个人网站 (CLE Developer、Xcin Maintainer),有许多值得收藏的 GNU/Linux 与 X Programming 相关文章与个人作品。
http://twcpro.phys.ntu.edu.tw/~thhsieh/
Freshmeat (Linux 每日新进软体整理,更新速度快)
http://freshmeat.net/
LinuxApps (非常完整的软体讯息中心,对软体的介绍特别详实)
http://www.linuxapps.com/
Perl CPAN (Comprehensive Perl Archive Network)
http://www.perl.com/CPAN
Perl Builder
http://www.solutionsoft.com/perl.htm
Python Builder
http://www.pcpros.net/~vbman/
(http://www.fanqiang.com)
进入【UNIX论坛】
|
|
| 相关文章 |
|
|
|
|
 |
★ 樊强制作 欢迎分享 ★ |