chapter10 Linux下的GUI编程.ppt_第1页
chapter10 Linux下的GUI编程.ppt_第2页
chapter10 Linux下的GUI编程.ppt_第3页
chapter10 Linux下的GUI编程.ppt_第4页
chapter10 Linux下的GUI编程.ppt_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、重点内容: Xlib编程 GTK+/GNOME编程,第10章 Linux下的GUI编程,一、概念,X Window也称为X窗口系统,是由麻省理工学院(MIT)推出的窗口系统,简称X。它旨在建立不依赖于特定硬件系统的显示窗口系统的标准。X窗口的最早商业版本是在1986年推出的X10.4,该版本成为某些商业应用的基础。1987年9月MIT发布了新版本X11Rl,在1988年发布了X11R2版。版本11在它的速度上、灵巧性和多屏幕的风格上都远远超过了X10版。它的出现标志着计算机工作站的一个新时代的到来。X11版本已经成为Unix平台的事实上的标准GUI。现在,几乎所有工作站都采用了X窗口的标准,几

2、乎所有工作站上的应用软件都采用了基于X Window的软件平台。目前X的版本到了x11R6.4版,它仍然是源代码发放的。同时,微机上的X系统也日益增多。例如,Linux使用的XFree86就是基于X11R6.4的。 X窗口系统主要由四个部分组成,我们将简要对它们进行介绍。它们是: -X服务器:与用户交互操作。 -X协议:客户/服务器之间的通信。 -X库:程序设计接口。 -X客户:软件应用程序。,二、Xlib编程,基于X的应用软件是通过调用X的一系列C语言函数实现其各种功能的。这些函数称为Xlib(X库),它提供了建立窗口、画图、处理用户操作事件等基本功能。Xlib是一种底层库,用它来编与图形和

3、交互界面程序虽然非常灵活,但比较复杂和繁琐,因此我们不准备在Xlib程序设计上多做停留,只是简略介绍一下它的基本编程方法。 Xlib编程的基本步骤: 1)打开Display。 2)获取屏幕等基本信息。 3)建立窗口。 4)选择窗口等接收事件类型。 5)建立图元。 6)显示窗口。 7)进入事件循环。 示例:该程序弹出一个窗口,并且在窗口的中央绘制“Hello world!”字符串。,三、GTK+/GNOME编程,编写过这类X1ib程序的程序员肯定都希望找到一个更好的办法。而好办法确实有。常用的操作界面元素如按钮、滚动条和菜单等早就被实现过很多次了。X窗口系统里的这类元素也叫做构件,把它们收集在一

4、起就形成了人们所说的X工具包。其中,知名的X工具包包括以下几个: -Xt。Xt是在X的上面编写的个免费函数库,它给Xlib库增加了一些功能,是一个能够简化应用程序设计的跳板。 -OpenLook。OpenLook是Sun公司产品的一个免费的工具包,它强调了一种另类的观感。它是在一个为Xview的函数库上面建立起来的,这个库与Xt很相似。 -Motif。Motif是OSF组织的一个标准,设计目的是为UNIX桌面提供统一的观感。Motif分为两个主要部分:一组用来定义Xt函数中使用的各种常数的头文件和一个用来简化对话框和菜单等元素的创建工作的易于使用的函数库。Motif还定义了一种程序设计风格,不

5、管程序员是否使用Motif工具包,都可以参照它来设计自己的程序。 -Qt。Qt是一个由Trolltech公司出品的函数库,它构成了KDE桌面环境的基础,在大多数Linux发行版本里都能找到它。Qt编程依赖于大量的C+类集,通常其中每个类都有一大批成员函数来处理类对象。 -GTK+。GTK+就是GIMP工具包,它是GNOME系统的基石。下面我们将详细介绍如何对这个高级环境进行程序设计。,1、GTK+/GNOME简介,三、GTK+/GNOME编程,GTK+是GNOME应用软件使用的构件集,它的外观和感觉最初是来源于Motif。构件集是一套可以用于桌面环境的GUI对象,按钮、窗口和工具栏等都是构件的

6、实例。构件集设计用来支持功能性和灵活性。GTK+还包括一个主体引擎,用户可以使用这些构件来改变应用程序的外观。同时GTK+构件保持了小巧和高效的特点。 GTK+构件集在库通用公共许可(LGPL, Library General Public License)下是完全免费的。LGPL允许开发人员使用该构件集,并且像使用其它免费软件一样拥有其所有权。该构件集还有一个特点,就是它支持许多编程语言,包括C、C+、Perl、Python等。同时,它完全支持国际化,允许基于GTK+的应用程序用于其它的字符集,例如亚洲语言。 在GNOME上运行的程序本质上都是包含GNOME和GTK+函数的C程序。GNOME

7、和GTK+函数为上述程序处理GNOME桌面操作。当使用GNOME编程时,会用到大量的函数和结构,这些函数和结构包含在许多库里,组成了GNOME应用软件的不同部分。,1、GTK+/GNOME简介,三、GTK+/GNOME编程,任何GTK程序都需要几个基本的函数和组成都分。首先你需要至少包含头文件gtk.h。根据所使用的构件和函数,可能会需要其他的GTK头文件。然后必须为想要使用的构件定义指针。随后需要利用gtk_initt函数初始化GTK库。做完这些以后,就可以利用GTK函数定义构件,并将它们的地址赋给开始定义的指针。然后,可以利用GTK函数为构件指定动作和属性,如显示它们。例如,一个关闭方框(

8、Close box)的事件delete_event绑定到窗口和函数gtk_main_quit。因此,如果一个用户点击了窗口中的关闭方框(Close box),程序结束。最后,利用gtk_main函数运行构件。,2、GTK+编程,三、GTK+/GNOME编程,GTK定义有自己的基本数据类型集合,他们中的大多数都有直接对应的C语言标准数据类型。这使得不同计算机平台之间的代码移植工作更容易实现;并且在某些情况下比如用gpointer替void *的情况下,它可以改进程序的可读性,使之更容易理解。坚持使用这些新的数据类型可以保证我们的代码即使在其底层实现发生了变化的情况下仍然能够继续工作。,2、GTK

9、+编程,三、GTK+/GNOME编程,GTK的操作更加复杂一些。当事件在某个构件上发生时,该构件将发出一个信号(signal),然后该信号被用于运行一个函数,这个函数与信号和对象都是关联的。 也可以将一个事件直接关联到一个函数,为此,必须将给定对象的信号与特定的函数相关联,与特定对象关联的函数一般称为“处理机”(handlers)或者“回掉函数”(callbacks function)。一个信号发出后,其处理机或者回调函数就被调用。这个过程称为“发射”(emission)。 要将一个特定的事件与函数关联,且该函数将根据给定的信号运行,可以利用函数gtk_signal_connect或者gtk_

10、signal_connect_object。检测到信号后,它的关联函数自动运行。gtk_signal_connect函数用来调用要传递参数的函数,gtk_signal_connect或gtk_signal_connect_object函数都可以用来调用不需要参数的函数。,2、GTK+编程,三、GTK+/GNOME编程,也可以利用信号连接函数将事件直接与一个对象和函数关联起来,而不必使用信号。事件是由X11服务器传输的消息,用来指示如鼠标点击和菜单选择等发生的事情。在gtk_signal_connect函数中,可以使用事件名而不是信号名,在示例程序2中,使用的就是事件名delete_event。

11、事件回调函数包含一个为事件增加的参数。这个参数的类型可以是GdkEvent或者是其他几个事件类型之一。 void callback_func(GtkWidget *widget, GdkEvent *event, gpointer callback_data); 例如,要将事件button_press_event与一个OK按钮关联。可以使用button_press_event作为信号名。,2、GTK+编程,三、GTK+/GNOME编程,GTK+有几十个类似于按钮的基本构件,它们在建立起来以后便可以遵照某些布局规则组合成一个真正使用的程序。一般程序只使用水平和垂直方向的布局就可以了。 例1:生成

12、一个简单的提示用户输入的程序,它包涵GTK的两个基本构件:标签(Label)和输入区(Entry),两个构件水平排列。 例2:界面总体布局是垂直方向的,它容纳了四个构件:三个水平容器和一个窗格构件,在水平构件中义容纳了其他构件。,3、GTK+布局,例1界面,例2界面,四、使用GTK+编写GNOME程序,GNOME程序构筑在GTK+程序之上,它提供了GNOME函数,可以使你更轻松地创建与GNOME桌面风格一致的GNOME界面。要创建一个简单的GNOME程序,首先为GNOME构件定义GTK对象,然后利用GNOME函数来创始化程序和定义你的构件。GTK函数例如gtk_signal_connect是用来关联GUI事件和对象的,而GNOME函数例如gnome_app_create_menus则可以创建菜单。在GNOME程序中,需要包含一个叫做gnome_init的初始化函数,并将该函数置于程序的开头。要为应用程序创建一个窗口,利用函数gnome_app_new。 GnomeApp构件是GNOME应用程序的基本构件。这个构件是包含菜单、工具栏和数据的主要窗口。利

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论