Linux应用程序开发指南使用gtk+ gnome库.pdf

上传人:qwe****56 文档编号:70344024 上传时间:2023-01-19 格式:PDF 页数:326 大小:10.52MB
返回 下载 相关 举报
Linux应用程序开发指南使用gtk+ gnome库.pdf_第1页
第1页 / 共326页
Linux应用程序开发指南使用gtk+ gnome库.pdf_第2页
第2页 / 共326页
点击查看更多>>
资源描述

《Linux应用程序开发指南使用gtk+ gnome库.pdf》由会员分享,可在线阅读,更多相关《Linux应用程序开发指南使用gtk+ gnome库.pdf(326页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、下载第1章 Linux软件开发概述1.1 关于LinuxL i n u x于1 9 9 1年诞生于芬兰。大学生Linus To r v a l d s,由于没有足够的钱购买昂贵的商用操作系统,于是自己编写了一个小的操作系统内核,这就是 L i n u x的前身。Linus To r v a l d s将操作系统的源代码在I n t e r n e t上公布,受到了计算机爱好者的热烈欢迎。各种各样的计算机高手不断地为它添加新的特性,并不断地提高它的稳定性。1 9 9 4年,Linux 1.0正式发布。现在,L i n u x已经成为一个功能强劲的3 2位的操作系统。严格地说,L i n u x只

2、是一个操作系统内核。比较正式的称呼是G N U操作系统,它使用L i n u x内核。G N U的意思是G N U s not Unix(G N U不是U n i x)一种诙谐的说法,意指 G N U是一种类U n i x的操作系统。G N U计划是由自由软件的创始人 S t a l l m a n在2 0世纪8 0年代提出的一个庞大的项目,目的是提供一个免费的类U n i x的操作系统以及在上面运行的应用程序。G N U项目在初期进展并不顺利,特别是操作系统内核方面。L i n u x适时而出,由于它出色的性能,使它成为G N U项目的操作系统的内核。从此以后,G N U项目进展非常迅速:全

3、世界的计算机高手已经为它贡献了非常多的应用程序和源代码。L i n u x是遵从G P L协议的软件,也就是说,只要遵从 G P L协议,就可以免费得到它的软件和源代码,并对它进行自由地修改。然而,对一般用户来说,从 I n t e r n e t或者其他途径获得这些源代码,然后对它们进行编译和安装是技术难度很高的工作。一些应用程序的安装也都非常复杂。因而,有一些公司如Red Hat、VA等开始介入L i n u x的业务。它们将L i n u x操作系统以及一些重要的应用程序打包,并提供较方便的安装界面。同时,还提供一些有偿的商业服务如技术支持等。这些公司所提供的产品一般称为 L i n u

4、 x的发布版本。目前比较著名的 L i n u x发布版本有以下几种:Red Hat最著名的L i n u x服务提供商,I n t e l、D e l l等大公司都对其有较大投资,该公司前不久收购了开放源代码工具供应商 C y g n u s公司。S l a c k Wa r e历史比较悠久,有一定的用户基础。S U S E在欧洲知名度较大。Tu r b o L i n u x在亚洲,特别是日本用户较多。该公司在中国推出了 TurboLinux 4.0、4.0 2和6.0的中文版,汉化做得很出色。D e b a i n完全由计算机爱好者和L i n u x社区的计算机高手维护的L i n u

5、 x发布版本。L i n u x进入中国后,在我国计算机界引起了强烈的反响,最近两年,也出现了许多汉化的L i n u x发布版本,影响较大的有以下几种:X t e a m L i n u x北京冲浪平台公司推出的产品,中国第一套汉化的 L i n u x发布版本。第一部分Linux GUI 编程框架及编程基础B l u e P o i n t1 9 9 9年底正式推出的产品,内核汉化技术颇受瞩目。红旗L i n u x中国科学院软件研究所和北大方正推出的 L i n u x发布版本。从本质上来说,上面所有发布版本使用的都是同样的内核(或者版本略有不同),因而,它们在使用上基本上没有什么区别。

6、但它们的安装界面不一样,所包含的应用程序也有所不同。L i n u x之所以大受欢迎,不仅仅因为它是免费的,而且还有以下原因:1)Linux是一个真正的抢占式多任务、多线程、多用户的操作系统。2)Linux性能非常稳定,功能强劲,可以与最新的商用操作系统媲美。3)Linux有非常广泛的平台适应性。它在基于 I n t e l公司的x 8 6(也包括A M D、C y r i x、I D T)的计算机、基于A l p h a的计算机,以及苹果、S u n、S G I等公司的计算机上都有相应的发布版本,甚至在A S/4 0 0这样的机器上都能找到相应的版本。L i n u x还可以在许多P D A

7、和掌上电脑以及嵌入式设备上运行。4)已有非常多的应用程序可以在 L i n u x上运行,大多数为 SCO Unix开发的应用程序都能在L i n u x上运行(借助于i B C S软件包),甚至还比在SCO Unix上运行速度更快。借助 D o s e m u,可以运行许多D O S应用程序,而借助Wa b i或Wi n e,还可以运行许多为Wi n d o w s设计的软件。5)Linux是公开源代码的,也就是说,不用担心某公司会在系统中留下后门(软件开发商或程序员预留的,可以绕开正常安全机制进入系统的入口)。6)只要遵从G P L协议,就可以自由地对L i n u x进行修改和剪裁。当然

8、,L i n u x的优点决不止于此。对计算机专业人员来说,L i n u x及其相关应用程序也是学习编程的绝好材料,因为这些软件都提供了完整的源代码。L i n u x的出现为我国软件产业赶超世界先进水平提供了极好的机遇,也为我国软件产业反对微软的垄断提供了有力的武器。1.2 关于Linux的桌面环境目前使用L i n u x主要在于服务器端。在 I n t e r n e t上有很多服务器都在使用 L i n u x。但是,一个操作系统要想得到普及,并占据一定的市场份额,必须要使非计算机专业人士都可以轻松掌握这种系统。而L i n u x作为一种类U n i x操作系统,对它的操作一般都是

9、通过复杂的 S h e l l命令进行的。因而,应该有一种简便易学的图形用户接口(Graphics User Interface,G U I),使用户使用鼠标就可以完成大多数工作。在L i n u x中,G U I由以下几个部分组成:窗口系统组织显示屏上的图形输出并执行基本的文本和绘图功能。窗口管理器负责对窗口的操作(比如最小化、最大化、关闭按钮的形状,窗口边框外观等)以及输入焦点的管理。工具包带有明确定义的编程界面的常规库。风格指定应用程序的用户界面外观和行为。在L i n u x发展的初期,众多的计算机专家为它贡献了多种图形用户接口,如F V W M 9 5、A f t e r S t e

10、 p等。这些接口模仿了Windows 95、M a c i n t o s h、N e s t S t e p、A m i g a、Unix CDE等桌面环境。这些G U I在一定程度上来说只是其他图形接口的仿制品,不能提供优秀的操作系统所需要的特性。其后,自由软件社区的一批计算机专家开始了 K D E项目(K Desktop Environment,K桌面环境),目的是提供一个开放源代码的图形用户接口和开发环境。该项目取得了极大的2使用第一部分Linux GUI 编程框架及编程基础下载成功,K D E成为许多L i n u x发布版本的首选桌面环境。G N U/L i n u x项目因此而得

11、到蓬勃发展。但是,K D E是基于Troll Te c h n o l o g i e s公司的Q t库的。Q t库是一个跨平台的C+类库,可以用于多种U n i x、L i n u x、Wi n 3 2等操作系统。Q t并不是遵从G P L或L G P L协议的软件包。它的许可条件是:如果使用它的免费版本开发应用程序或程序库,则所开发的软件必须开放源代码;如果使用它的商用版本,则可以用以开发私有的商用软件。另外,Q t库是属于Tr o l l公司的产品,一旦Tr o l l公司破产,或者被收购,自由软件事业将受到严重打击。1 9 9 7年由墨西哥国立自治大学的 Miguel de Icaza

12、领导的项目组开始了 G n o m e开发计划。G n o m e是GNU Network Object Model Environment(G N U,网络对象模型环境)的缩写。该计划的最初目的是创建一种基于应用程序对象的架构,类似于微软公司的 O L E和 C O M技术。然而,随着项目的进展,项目的范围也迅速地扩大;项目开发过程中有数百名程序员加入进来,编写了成千上万行的源代码。该项目进展很快,1 9 9 8年发布了Gnome 1.0。目前的最新版本是于1 9 9 9年1 0月发布的October Gnome。现在,G n o m e已成为一个强劲的G U I应用程序开发框架,并且可以在

13、任何一种U n i x系统下运行。G n o m e使用的图形库是G t k+最初为了编写G I M P而创建的一套构件库,它是基于 L G P L创建的,可以用它来开发开放源代码的自由软件,也可以开发不开放源代码的商用软件。G n o m e的界面与K D E的界面是类似的(G n o m e的目的之一就是创建一套类似K D E的桌面环境),熟悉K D E的用户无需学习就能够使用 G n o m e。由于以上几个原因,G n o m e已经成为大多数L i n u x发布版本的首选桌面环境。由于G n o m e项目的成功,1 9 9 8年11月Q t库的开发者Tr o l l公司宣布修改许

14、可证协议,Q t库将成为自由软件。但是获取 Q t库的许可证很不方便,况且 G n o m e的进展也很不错,因而,只要有可能,应该避免使用Q t库以及K D E。从用户的角度看,G n o m e是一个集成桌面环境和应用程序的套件。从程序员的角度看,它是一个应用程序开发框架(由数目众多的实用函数库组成)。即使用户不运行G n o m e桌面环境,用G n o m e编写的应用程序也可以正常运行,但是这些应用程序是可以很好地和 G n o m e桌面环境集成的。G n o m e桌面环境包含文件管理器,它用于任务切换、启动程序以及放置其他程序的“面板”、“控制中心”(包括配置系统的程序以及一些

15、小东西)等。这些程序在易用的图形界面背后隐藏了传统的 UNIX Shell。G n o m e的开发结构使开发一致的、易用的和可互相操作的应用程序成为可能。1.3 Linux系统中的软件开发1.3.1 开发所使用的库在L i n u x下开发G U I程序的首要问题是采用什么样的图形库。在 L i n u x的发展历史中曾经出现过多种图形库,但是由于自由软件的特点(没有技术方面的承诺),使得无人继续对它们进行维护,或者其他方面的原因,这些库都已慢慢地被人遗忘了。G t k+(GIMP To o l K i t,G I M P工具包)是一个用于创造图形用户接口的图形库。G t k+是基于L G

16、P L授权的,因此可以用 G t k+开发开放源码软件、自由软件,甚至商业的、非自由的软件,并且不需要为授权费或版权费花费一分钱。之所以被称为 G I M P工具包因为它最初用于开发“通用图片处理程序”(General Image Manipulation Program,G I M P),但是 G t k已在大量软件项目,包括G n o m e中得到了广泛应用。G t k+是在Gdk(GIMP Drawing Kit,G I M P绘图包)的基第1章L i n u x软件开发概述使用3下载础上创建的。G d k是对低级窗口函数的包装(对X window系统来说就是X l i b)。读者可能会

17、看到,在本书中既有G T K,又出现了G t k+。一般用G T K代表软件包和共享库,用G t k+代表G T K的图形构件集。G T K的主要作者是:Peter Mattis petmx c f.b e r k e l e y.e d uSpencer Kimball spencerxcf.berkeley.edu Josh MacDonald jmacdxcf.berkeley.edu G t k+图形库使用一系列称为“构件”的对象来创建应用程序的图形用户接口。它提供了窗口、标签、命令按钮、开关按钮、检查按钮、无线按钮、框架、列表框、组合框、树、列表视图、笔记本、状态条等构件。可以用它们

18、来构造非常丰富的用户界面。在用G t k+开发G n o m e的过程中,由于实际需要,在上面的构件基础上,又开发了一些新构件。一般把这些构件称为 G n o m e构件(与G t k+构件相对应)。这些构件都是 G t k+构件库的补充,它们提供了许多 G t k+构件没有的功能。从本质上来说,G t k+构件和G n o m e构件是完全类似的东西。G T K本质上是面向对象的应用程序编程接口(A P I)。虽然完全是用C写成的,但它仍然是用类和回调函数(指向函数的指针)的方法实现的。1.3.2 Gnome的开发结构只使用 G t k+构件也可以开发出优秀的L i n u x应用程序,但是

19、 G n o m e构件,特别是G n o m e A p p、G n o m e U I I n f o等,使开发界面一致的应用程序变得更加容易。G n o m e的一些新特性,如p o p t参数分析,保存应用程序设置等也是 G t k+构件所没有的。G n o m e的应用程序开发结构核心是一套库,都是由通用的ANSI C语言编写的,并且倾向于使用在类U N I X的系统上。其中涉及图形的库依赖于 X Wi n d o w系统。G n o m e差不多对任何语言都提供了Gnome API接口,其中包括 A d a、S c h e m e、P y t h o n、P e r l、To m、

20、E i ff e l、D y l a n以及Objective C等。至少有三种不同的C+封装。本书只介绍有关库的 C语言接口,不过,对使用其他语言绑定的用户来说,它也很有用,因为从 C到其他语言之间的转换都是非常直接的。本书包含G n o m e库1.0版本(包括兼容的b u g补丁版,比如 1.0.9所有 1.0.x版本都是兼容的)。G n o m e的开发架构包含以下一些内容:1.非Gnome 库G n o m e并不是从头开始的,它充分继承了自由软件的传统其中许多内容来自于G n o m e项目开始之前的一些函数库。其中一些库 G n o m e应用程序开发架构的一部分,但是不属于G

21、n o m e库我们称之为非G n o m e库。可以在G n o m e环境中使用这些库函数。主要有以下几种:G l i bG l i b是G n o m e的基础,它是一个C工具库,提供了创建和操作常用数据结构的实用函数。它也涉及到了可移植性问题,例如,许多系统缺乏s n p r i n t f()函数,但是g l i b包含了一个,称为g _ s n p r i n t f(),它能保证在所有平台上使用,并且比 s n p r i n t f()更安全(它总是将目标字符串以N U L L结尾)。Gnome 1.0中使用g l i b的 1.2版本,可以和任何 1.2系列的g l i b一

22、起工作(1.2.1、1.2.2,等等)。4使用第一部分Linux GUI 编程框架及编程基础下载Gtk+G t k+(GIMP To o l k i t的缩写),是在G n o m e应用程序中使用的G U I工具包。G t k+最初是为了设计G I M P而引入的(GNU 图片处理程序),但是现在已变成通用的库。G t k+依赖于g l i b。G t k+包中包含了G d k,它是对底层的 X Wi n d o w系统库X l i b的简化。由于G t k+使用了G d k而不是直接调用X l i b,因此G d k的移植版本允许G t k+运行在不同于X 但只有相对较少的修改的窗口系统上

23、。G t k+和G i m p已经移植到了Wi n 3 2平台(3 2位的Wi n d o w s平台,包括Windows 95/98、Windows NT/2000)上。对G n o m e应用程序来说,G t k+具有以下的特性:1)动态类型系统。2)用C语言编写的对象系统,可实现继承、类型检验,以及信号/回调函数的基础结构。3)类型和对象系统不是特别针对G U I的。4)GtkWi d g e t对象使用对象系统,它定义了G t k+的图形组件的使用接口。5)大量的G t k Wi d g e t子类(构件)。G n o m e在基本G t k+构件集合的基础上添加了许多其他构件。Gno

24、me 1.0是在Gtk+1.2版本的基础上完成的。ORBit O R B i t是 一个用C开发的CORBA 2.2 ORB。和其他O R B相比,它短小精悍,但速度更快,同时还支持 C语言映射。O R B i t是以一整套库函数的方式实现的。C O R B A,或称作通用对象请求中介构架(Common Object Request Broker Architecture),是一套对象请求中介,或称为O R B的规范。一个O R B更类似于动态链接程序,但是它以对象的方式操作,而非子程序调用。在执行过程中,程序能够请求一个特定的对象服务;O R B可定位对象并且创建对象和程序连接。例如,一个电

25、子邮件程序可以请求 a d d r e s s b o o k对象,并且利用它查找人名。与动态链接库不同,C O R B A可以在网络内很好地运行,并且允许不同编程语言和操作系统之间进行交互。如果熟悉Wi n d o w s操作系统下的DCOM,那么C O R B A与之类似。Imlib I m l i b(图片库)提供一些例程,其中包括加载、存储、显示,以及定绘制各种流行的图像格式(包括 G I F、J P E G、P N G以及T I F F)的函数。它包括两种版本:X l i b-o n l y版本和基于G d k的版本。G n o m e使用 G d k版本。2.Gnome库下面所介绍

26、的库是G n o m e-l i b s包的一部分,并且是专门为G n o m e项目开发的。libgnome l i b g n o m e是一些与图形用户接口无关的函数集合,G n o m e应用程序可以调用其中的函数。它包含分析配置文件的代码,也包含与一些外部实用程序的接口,比如国际化编程接口(通过GNU gettext包)、变量解析(通过p o p t包)、声音编程接口(通过E n l i g h t e n m e n tD a e m o n,e s o u n d)等。G n o m e-l i b s包考虑了与外部库之间的交互,因此程序员无需关心库的实现或可用性。libgnom

27、eui l i b g n o m e u i包含了与G U I相关的G n o m e代码。它由为增强和扩展G t k+功能而设计的构件组成。G n o m e构件通常使用用户接口策略,以提供更方便的 A P I函数(这样程序员需要指定的东西较少)。当然,这也让应用程序界面更一致。l i b g n o m e u i主要包含:1)GnomeApp构件一般用来为应用程序创建主窗口。它使用 G n o m e D o c k构件,允许用户重新排列工具栏,还可以将工具条从窗口上拖开。2)GnomeCanvas构件用来编写复杂的、无闪烁的定制构件。第1章L i n u x软件开发概述使用5下载3)

28、Gnome 内置的p i x m a p(包括打开、关闭、保存以及其他操作的图标)用于创建和使用对话框的例程。G n o m e P i x m a p构件比G t k P i x m a p功能更多。libgnomeui 中还有几种其他构件,如 G n o m e E n t r y、G n o m e F i l e P i c k e r等。这些构件都比G t k+构件库中的构件功能更强,也更方便。libgnorba l i b g n o r b a提供与C O R B A相关的实用程序,包括安全机制和对象激活。对象激活是指获得实现给定接口对象的引用过程,它包括执行服务器程序,加载共享

29、库模块,或为已有程序请求新的对象实例等。libzvt 这个库包含一个终端构件(Z v t Te r m),可以在G n o m e程序中使用它。libart_lgp 这个库包含由Raph Levien编写的图形绘制例程。在这里包含的是在 L G P L许可下发布的,用在G n o m e C a n v a s构件中的,Raph Levien也销售它的增强版本。实质上它是一个矢量图形光栅图形库,功能类似于 P o s t S c r i p t语言。3.其他库这些库一般使用在G n o m e应用程序中,但它不是Gnome-libs 专属的部分。Gnome-print G n o m e-p

30、r i n t目前还是实验性的,但是非常有前途。它使用 l i b a r t _ l g p l库,可以和G n o m e C a n v a s一起工作得很好。它提供一个虚拟输出设备(称“打印上下文”),因此一段代码能输出到一个打印预览构件或P o s t S c r i p t文件,还可以输出到其他打印机格式。G n o m e-p r i n t也包含与打印相关的G U I元素,例如打印设置对话框、虚拟字体接口(处理 X字体不可打印的问题)。Gnome-xml G n o m e-x m l是还未经验证的X M L引擎,它由W W W协会的Daniel Ve i l l a r d编

31、写。它能按照树状结构分析 X M L,也能按照X M L输出树状结构。它对任何需要加载和保存结构化数据的应用程序来说是很有用的,许多 G n o m e应用程序把它作为文件格式使用。这个库不依赖于任何其他的库(甚至 g l i b),所以它只是在名义上是一个 G n o m e库。然而,可以认为大多数G n o m e用户都安装了它,因此如果应用程序使用了这个库,对用户来说也没有什么不方便。Guile G u i l e是S c h e m e编程语言在一个库中的实现,它使任何应用程序都能带有一个嵌入式的S h e m e解释器。它是G N U项目的正式扩展语言,并且有一些 G n o m e

32、应用程序也使用它。为应用程序添加扩展语言听起来挺复杂,但是有了 G u i l e后就微不足道了。一些 G n o m e应用程序也支持 P e r l和P y t h o n,一旦实现了应用程序,同时支持几种语言就会变得很容易。G u i l e在G n o m e开发者心目中有着特殊的地位。Bonobo B o n o b o是一种对象嵌入式结构,类似于M i c r o s o f t的O L E。例如,它允许你在电子表格中嵌入图表。它将在 G n o m e中普遍使用。任何应用程序将能通过适当的 B o n o b o组件调用G n o m e库,显示 M I M E类型数据,例如纯文

33、本、H T M L或图像。1.4 开发Linux应用程序的编程语言和编程工具L i n u x是一种类U n i x的操作系统。传统 U n i x下的开发语言是 C语言。因为C语言是平台适应性最强的语言,差不多每种平台上都会有一个C编译器。C语言也更易移植,因而,在L i n u x下编程的最佳语言应该是 C语言,L i n u x上的很多应用程序就是用 C语言写的。当然,也可以使用其他语言。因为G t k+和G n o m e是用C语言编写的,所以在开发L i n u x下的G U I程序时使用C语言是非常6使用第一部分Linux GUI 编程框架及编程基础下载方便的。但是 G t k+也

34、提供与许多其他语言的接口,如 A d a、S c h e m e、P y t h o n、P e r l、To m、E i ff e l、D y l a n以及Objective C等。如果用C+语言开发基于G t k+应用程序,可以使用一个名为G t k-的函数库,它是G T K工具包的C+风格的封装。如果要用 G t k+库和其他语言,最好参考相应的文档。本书只介绍使用C语言开发L i n u x程序。一般的L i n u x发布版本中都提供了 C编译器g c c或e g c s。使用g c c或e g c s可以编译C和C+源代码,编译出的目标代码质量非常好,编译速度也很快。各种C编译器

35、都要使用一些C语言实用函数。为了保证程序的可移植性,g c c没有使用通用的C函数库,而是使用一种称为 g l i b的函数库。g l i b也是G t k+的基础。它包含一些标准函数的替代函数(如字符串处理函数)和基本数据结构的实现(单向链表、双向链表、树、哈希表等)。g l i b中所包含的函数消除了某些函数的安全漏洞,使其更加可靠,在不同平台上移植也更加方便。还有许多使用工具可以提高L i n u x下的编程效率,如g d b是优秀的C语言调试器,有非常丰富的调试指令;a u t o m a k e和a u t o c o n f用于由源代码结构配置编译选项,生成编译所需的M a k e

36、 f i l e文件。到在目前为止,还没有像Wi n d o w s平台上的Visual Basic、D e l p h i等一样的可视化的快速应用程序开发工具。开发L i n u x应用需要用文本编辑器书写源代码,然后再用编译器生成应用程序。眼下有一个开发小组正致力于开发一个L i n u x下的类似于Visual Basic的开发工具g B a s i c,另外,预计I n p r i s e公司(即B o r l a n d)的Delphi for Linux也即将面市。有几种正在开发的 R A D(Rapid Application Development)工具,其中最有希望的是 G

37、l a d e一种G U I生成器,可以快速生成创建界面的C源程序。1.5 本书的结构本书包含了以下内容:Gnome应用程序开发的框架。开发L i n u x应用程序的方法和步骤。glib,G t k+/G n o m e构件的使用方法。GDK基础知识。Linux常用编程工具:调试工具g d b,G U I生成器G l a de。本书附录包含G t k+和G n o m e对象介绍(每个对象有一个简短描述),还有一些在线编程资源。本书提供了大量可供参考的源代码。如果觉得内容不够充分,请参考相应的头文件。实际上,G t k+/G n o m e和g l i b的头文件都是非常简单易懂的,从函数名

38、称就可以猜到它的用处和用法。如果还觉得不够,可以钻研它们的源代码,这对了解它们的实现方法也是极有好处的。第1章L i n u x软件开发概述使用7下载下载第2章 Gtk+/Gnome开发简介2.1 安装Gtk+/Gnome库要想用G t k+/G n o m e编程,首先要保证系统中已经安装了 G t k+和G n o m e库。一般情况下,L i n u x发布版本的光盘中都应该包含了所需要的库的源代码。例如 Red HatLinux 6.0/6.1和TurboLinux 4.0中都有G t k+和G n o m e的最新版本。在安装系统的过程中,当提示安装类型时,一般有“服务器”、“工作站

39、”、“开发工作站”、“自定义”和“完全安装”等几个选项。选择“开发工作站”或“完全安装”,完全安装大多数用于软件开发的库、头文件和实用程序,如G t k+库、G n o m e库、a u t o m a k e、a u t o c o n f i g、g c c编译器、g d b调试器等。如果觉得系统中已有的库的版本已经过时,可以从 I n t e r n e t上下载最新版本,然后安装。可以从G t k+的We b站点h t t p:/w w w.g t k.o rg下载最新版本的G t k+。G t k+所使用的版本号与L i n u x的版本编号方法类似,偶数版本号(如 1.0和1.2)

40、表示稳定的版本,而奇数版本号(如 0.9和1.1)表示正在开发的版本。有时还增加一个附加数字表示对这一版本进行了修正,如1.2.1。当前G t k的最新版本是1.2.3。从网上下载的文件名一般是 g t k+1.2.3.t a r.g z或者其他类似形式,文件名中包含了该软件包的名称和版本号信息。因为它的后缀是.t a r.g z,所以它是一个归档的压缩文件。用 g u n z i p命令对它解压缩:gunzip gtk+1.2.3.tar.gz将会产生一个解压缩的以.t a r结尾的归档文件。用t a r命令将它扩展为它的目录结构:tar-xvf gtk+1.2.3.tar这个命令建立了建库

41、所需要的目录结构。进入上面建立的目录,执行 c o n f i g u r e脚本生成编译所需的m a k e f i l e:./c o n f i g u r e下面可以建立库了。输入m a k e命令:m a k e建库后,需要安装刚才建立的库。输入以下命令:make install然后,还需要运行/s b i n/l d c o n f i g以使G t k+能正常工作。当然,完成上面工作的前提是系统上已经安装了 g l i b。不过,一般情况下都可以保证做到这一点。如果需要安装新版本的g l i b库,操作步骤和安装G t k+库一样。在G t k+源代码目录下的e x a m p

42、l e s子目录下,有很多 G t k+构件示例。这些代码都有很详细的注释,通读这些代码对学习 G t k+编程也是很有帮助的。本书中关于 G t k+构件的演示代码都来自这些示例。G n o m e的最新版本可以从h t t p:/w w w.g n o m e.o rg下载。取得新版本软件后,解压缩和安装的方法与G t k+类似。2.2 第一个Gtk+应用程序2.2.1 一个什么也不能做的窗口用G t k+库编程和同时使用G t k+/G n o m e库编程的方法完全相同,只是细节上略有不同。我们将从一个最简单的程序开始介绍 G T K,然后用一个简单的例子介绍G n o m e库编程的

43、方法。本程序将创建一个2 0 02 0 0像素的窗口,除了用s h e l l命令k i l l以外,没有其他的退出程序的方法。/*例子开始 base.c*/#include int main(int argc,char*argv)GtkWidget*window;gtk_init(&argc,&argv);window=gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_widget_show(window);gtk_main();r e t u r n(0);/*示例结束*/上面的源代码中的/*和*/之间的内容都是注释。L i n u x中常用的C编译器能够识别

44、/*/和/两种格式的注释。可以用g c c编译上述程序:gcc base.c-o base gtk-config-cflags-libs注意,gtk-config-cflags-libs选项左右的符号不是单引号,而是反引号(键盘上“1”键左边的键)。编译选项的含义选项将在下面编译“Hello Wo r l d”时解释。编译结束后,输入以下命令来执行上面创建的应用程序(结果如图2-1所示):./b a s e2.2.2 示例代码的含义在程序的源代码中,所有用到的函数和数据类型以及结构等都应该声明。也就是说,如果使用了一个按钮构件,应该包含按钮所对应的 g t k b u t t o n.h头文件

45、。如果在程序中使用了多种构件和函数库,包含这些头文件将会是一件很麻烦的事,也很容易出错。有一个特殊的头文件,g t k/g t k.h,其中包含了G t k+编程中所有需要的头文件,也包含 g d k.h和g l i b.h等。在源文件的前面包含这个文件就可以了。后面会看到,如果要用到G n o m e的构件和库函数,包含g n o m e.h就可以了。在g n o m e.h中已经包含了g t k.h文件和其他相关头文件。第一行#include 包含了所有需要的头文件。下一行:gtk_init(&argc,&argv);先调用函数gtk_init(gint*argc,gchar*arg v)

46、。所有G T K应用程序都要调用该函数。它为我们设置一些缺省值例如视觉和颜色映射,然后调用 gdk_init(gint*argc,gchar*arg v)。这第2章G t k+/G n o m e开发简介使用9下载图2-1 第一个Gtk应用程序,它什么也不能做个函数将函数库初始化,设置缺省的信号处理函数,并检查通过命令行传递给应用程序的参数。主要检查下面所列的一些值:-gtk-module-g-fatal-warnings-gtk-debug-gtk-no-debug-gdk-debug-gdk-no-debug-display-sync-no-xshm-name-class 它从变量表中删除

47、以上参数,并分离出所有不识别的值,应用程序可以分析或忽略这些值,由此生成一些G t k应用程序可以接受的标准参数。下面两行代码将创建和显示一个窗口:window=gtk_window_new(GTK_WINDOW_TOPLEVEL);gtk_widget_show(window);G T K _ W I N D O W _ TO P L E V E L参数指明让窗口使用“窗口管理程序”指定的状态设置和位置 布 置。没 有 子 窗 口 的 窗 口缺 省 设 置 为 2 0 0 2 0 0像素 大 小,而 不 是 0 0 大 小。g t k _ w i d g e t _ s h o w()函数让

48、 G t k知道那我们已经设置该构件(窗口)的属性,现在可以显示它了。最后一行代码进入 G t k主处理循环:gtk_main();g t k _ m a i n()是在每个G t k应用程序都要调用的函数。当程序运行到这里时,Gtk将进入等待状态,等候 X事件(比如点击按钮或按下键盘的某个按键)、Ti m e o u t或文件输入/输出发生。在这个简单例子里,所有事件都被忽略。用鼠标点击窗口右上角的“”按钮也不能将窗口关闭。唯一关闭它的办法就是使用 S h e l l命令k i l l删除它的进程。这里顺便指出:在代码中可以使用C语言风格的注释(/*/)和C+语言风格的注释(/)。不过,最好

49、能够使用C语言风格注释,否则可能在某些平台上编译时会出现错误。2.2.3 GTK的Hello World上面的例子实在是太简陋了,它甚至什么也不能做。下面我们创建一个G t k版本的“Hello Wo r l d”以进一步说明G t k+的编程方法。在这个例子中,我们在窗口里面放一个按钮构件。下面是示例的源代码。1.源代码/*示例开始 helloworld helloworld.c*/#include /*回调函数在本例中忽略了传递给程序的所有参数。下面是回调函数*/void hello(GtkWidget*widget,gpointer data)g_print(Hello Worldn);

50、10使用第一部分Linux GUI 编程框架及编程基础下载gint delete_event(GtkWidget*widget,GdkEvent*event,gpointer data)/*如果在 d e l e t e _ e v e n t 处理程序中返回F A L S E,GTK 将引发一个destroy*信号,返回T R U E意味着你不想关闭窗口。*这些在弹出你真的要退出?对话框时很有作用*/g_print(delete event occurredn);/*将T R U E改为F A L S E,主窗口就会用一个 d e l e t e _ e v e n t 信号,然后退出*/r

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁