GTK+2.0 编程范例
宋国伟编著
(京)新登字158 号内容简介
清华大学出版社
本书以范例程序的形式,由浅入深的引导读者学习开源软件领域和Linux 平台上最为著名的图形界面开发工
具GTK+2.0 的程序设计,是学习使用GTK+2.0 编程的良师益友。
本书共11 章,提供了70 余个GTK+2.0 程序范例,可以分两部分。第一部分为第1 章至第5 章,主要讲述
基础的GTK+2.0 编程、GTK+2.0 中的常用控件的使用方法、常用的GTK+2.0 编程技巧及其综合应用等,是初学
者入门的导引;第二部分为第6 章到第11 章,是前一部分的提高和扩展。主要讲述GTK+2.0 中新增的复杂控件
的使用、文件操作、游戏编程、自定义控件、结合MySQL 数据库编程、网络编程和GTK+2.0 中外观启动文件、
动态链接库、线程等高级应用。是进一步研究和应用GTK+2.0 编程,开发实用程序和大型软件的前提。
本书适合利用GTK+2.0 开发的专业人员,具有C 语言基础的大中专院校的相关专业的师生以及在Linux 上
开发图形界面的爱好者。
版权所有,翻印必究。本书封面贴有清华大学出版社激光防伪标签,无标签者不得销
售。
图书在版编目(CIP)数据
GTK+2.0 编程范例/宋国伟编著.-北京:清华大学出版社,2002 ISBN 7-302-06011-8
I.G… II.宋… III.Linux 操作系统-程序设计 IV.TP316.81
中国版本图书馆CIP 数据核字(2002) 第081653 号
出 版 者 : 清 华 大 学 出 版 社 ( 北 京 清 华 大 学 学 研 大 厦 , 邮 编 100084) http://www.tup.com.cn
http://www.tup.tsinghua.edu.cn
责任编辑:张彦青印刷者:发行者:新华书店总店北京发行所开本:787×1092 1/16 印张:20 字
数 : 469 千 字 版 次 : 2002 年 11 月 第 1 版 2002 年 11 月 第 1 次 印 刷 书 号 : ISBN
7-302-06011-8/TP·3588 印数:0001~4000 定价:33.00 元
前言
首先要解释两个概念,GIMP 和GTK。GIMP(GNU Image Manipulation Program,GNU 图像
处理程序)是基于Linux 平台,能与Photoshop 相媲美的图像处理软件;GTK(GIMP Tool Kit,GIMP
工具包)最初是GIMP 的专用开发库,后来发展为Linux 下开发图形界面应用程序的主流开发工
具之一,备受开源软件开发者瞩目。
2002 年3 月11 日,GTK+2.0 版正式发布,开发者们自豪地宣称“GTK+2.0 标志着自由软
件领域的图形界面开发工具走向成熟”。
GTK+2.0 是自由软件,并且是GNU 工程的一部分。GTK+2.0 的许可协议LGPL,允许任何
开发者使用(包括那些开发中的专利软件)且不收任何费用。GTK+2.0 是当今惟一百分之百零付费
的工业级的图形界面开发工具。
在发布GTK+2.0 软件包同时还发布了GLib2.0 、ATK1.0 和Pango1.0 这3 个与其相关的程
序库,这些构成了GNOME2 桌面环境的基础。
GLib2.0 是一个以C 语言编写的底层核心库,是GTK+2.0 和GNOME 的基石。它提供数据结
构的C 语言接口和运行时函数的接口,如事件循环、线程、动态调用和对象系统等。是一个轻量
级的实用性非常强的程序库软件包。
Pango1.0 是一个重在国际化的布局和正文翻译库,它为GTK+2.0 提供核心正文格式化、窗
口和字体操作。
ATK1.0 提供友好的界面集,在ATK 界面的支持下,应用程序或工具软件可以使用其他输
入设备。
本书就以GTK+2.0 为开发工具,向读者全面展示了在LINUX 平台上开发应用程序的各个侧
面,由浅入深地一步一步引导初学者在LINUX 平台上开发图形界面应用程序。
1. 读者对象
GTK+2.0 是采用C 语言设计,且本书所有例程都是用纯C 语言开发的,所以要求读者一定
要熟悉、掌握C 语言,对Linux 操作系统较熟悉,会用Linux 命令和GNOME、KDE 等桌面环
境操作,会用LINUX 下常用的C 语言编译器GCC,编译C 语言程序等。本书适合利用GTK+2.0
开发的专业人员,具有这些前提的大中院校的相关专业师生以及想在LINUX 上开发图形界面的
LINUX 爱好者。
2. 运行平台
本书的所有例程都在RedHat Linux 7.2 操作系统,GNOME2 桌面环境,运用GCC2.96 编译
通过。所有源程序都用GEDIT 2.0 编辑器编辑,使用UTF8 格式编码。
正是由于清华大学出版社彭欣编辑的多方努力,才使此书得以出版;我妻子郝春艳女士和我
父母对我的写作提供了大力支持,在此对他们表示衷心的感谢。
宋国伟2002 年9 月
目录
第1 章窗口与简单控件...............................................................................................................................1
1.1 最简单的窗口.......................................................................................................................................1
1.2 完善窗口的功能....................................................................................................................................4
1.3 Hello 程序..............................................................................................................................................7
1.4 用盒状容器排列按钮............................................................................................................................9
1.5 用格状容器排列按钮..........................................................................................................................12
1.6 带图像和快捷键的按钮......................................................................................................................15
1.7 方向按钮.............................................................................................................................................19
1.8 创建不同样式的标签..........................................................................................................................22
1.9 Splash 窗口..........................................................................................................................................24
第2 章菜单与工具栏..........................................................................................................................27
2.1 添加菜单.............................................................................................................................................27
2.2 创建菜单的快捷方法..........................................................................................................................31
2.3 创建工具条.........................................................................................................................................33
2.4 浮动的工具条和菜单..........................................................................................................................36
2.5 状态栏.................................................................................................................................................39
2.6 完整的应用程序窗口..........................................................................................................................41
2.7 动态菜单操作.....................................................................................................................................48
2.8 条件菜单.............................................................................................................................................50
2.9 弹出式菜单.........................................................................................................................................52
第3 章常用控件...................................................................................................................................57
3.1 按钮盒.................................................................................................................................................57
3.2 规范的框架.........................................................................................................................................60
3.3 URL 链接............................................................................................................................................63
3.4 列表框.................................................................................................................................................65
3.5 下拉列表框.........................................................................................................................................67
3.6 自由布局.............................................................................................................................................71
3.7 图像控件的直接引用..........................................................................................................................74
3.8 控件属性的综合设置..........................................................................................................................77
3.9 数字选择.............................................................................................................................................80
3.10 执行命令工具....................................................................................................................................82
3.11 分隔面板...........................................................................................................................................84
第4 章对话框...........................................................................................................................................87
4.1 登录窗口.............................................................................................................................................87
4.2 创建有多个选项的窗口......................................................................................................................89
4.3 创建一个多项选一的窗口..................................................................................................................93
4.4 创建消息框.........................................................................................................................................96
4.5 选择文件和目录..................................................................................................................................99
4.6 选择字体...........................................................................................................................................102
4.7 选择颜色...........................................................................................................................................104
4.8 选择日期...........................................................................................................................................107
4.9 确认/取消对话框..............................................................................................................................109
4.10 是/否/取消对话框...........................................................................................................................111
4.11 关于对话框.....................................................................................................................................114
第5 章综合应用.................................................................................................................................117
5.1 计算器...............................................................................................................................................117
5.2 计时器...............................................................................................................................................123
5.3 简单动画实现...................................................................................................................................126
5.4 每日提示...........................................................................................................................................128
5.5 表格软件...........................................................................................................................................132
5.6 树状表格...........................................................................................................................................138
5.7 多窗口功能的实现............................................................................................................................142
第6 章复杂控件..................................................................................................................................145
6.1 文本视图控件...................................................................................................................................145
6.2 树视图控件.......................................................................................................................................150
6.3 绘图软件的实现................................................................................................................................156
6.4 安装向导...........................................................................................................................................160
6.5 不同形状的光标................................................................................................................................166
6.6 进度演示...........................................................................................................................................169
第7 章自定义控件与游戏................................................................................................................174
7.1 组合成的简单文件选择控件............................................................................................................174
7.2 八皇后游戏.......................................................................................................................................179
7.3 小蛇吃豆...........................................................................................................................................189
7.4 老虎机...............................................................................................................................................196
第8 章文件操作..................................................................................................................................207
8.1 文字编辑软件的实现........................................................................................................................207
8.2 INI 配置文件.....................................................................................................................................220
8.3 名片管理...........................................................................................................................................229
目录V
8.4 图片查看器.......................................................................................................................................236
第9 章数据库编程..............................................................................................................................240
9.1 连接MySQL 服务器与创建数据库、数据表.................................................................................240
9.2 向数据表中插入数据........................................................................................................................250
9.3 从数据表中选择数据........................................................................................................................254
9.4 文档管理...........................................................................................................................................259
第10 章网络编程................................................................................................................................266
10.1 简单的发E-mail 的软件.................................................................................................................266
10.2 简单的ECHO 服务器.....................................................................................................................269
10.3 简单的ECHO 客户端.....................................................................................................................272
10.4 多人聊天服务器..............................................................................................................................276
10.5 多人聊天服务器的客户端..............................................................................................................280
第11 章高级应用.............................................................................................. .................................286
11.1 更改控件的外观..............................................................................................................................286
11.2 做一个桌面主题..............................................................................................................................289
11.3 使用线程.........................................................................................................................................292
11.4 动态链接库.....................................................................................................................................296
11.5 用C++封装控件.............................................................................................................................299
11.6 国际化编程.....................................................................................................................................304
第1 章窗口与简单控件
本章重点:
开发图形用户界面(GUI) 程序的第一步是创建窗口,然后完善窗口的功能,进一步向窗口中
添加一些常用的控件,再就是编程使控件响应相关的事件。用GTK+2.0 来开发GUI 程序也是如
此。
GTK+2.0 提供一种用最短的代码来编写窗口和控件的方法,还有灵活易用的信号/回调函数
机制。通过本章的学习,读者能够创建简单的用户界面,编写一般的回调函数,理解信号/回调函
数机制。
本章主要内容:
z 如何使用窗口控件
z 如何使用容器控件
z 如何使用按钮控件
z 如何使用标签、图像控件
1.1 最简单的窗口
本节将介绍用GTK+2.0 创建一个最简单的窗口,并把它显示出来的方法。同时通过这一过程
理解GTK+2.0 程序结构。
窗口是GUI 编程中直接面对用户的操作对象,创建窗口也就成了初学者学习GUI 编程的第一
步。GTK+2.0 提供了非常简便的创建窗口的方法,用它写出的代码在所有GUI 开发工具中几乎
是最短的,也是最容易理解的。
(1) 启动Linux,进入GNOME 桌面环境,打开终端输入如下命令:
cd ~ mkdir ourgtk cd ourgtk mkdir 1 cd 1 mkdir base cd base
创建工作目录,并进入此目录开始编程。说明:首先进入用户工作目录,创建一个学习GTK+2.0 总
的工作目录ourgtk ,接着创建本章的工作目录1,然后再创建本节的工作目录base,进入此目录开
始工作。
(2) 打开编辑器(GEDIT2.0 见前言)。输入如下代码,以base.c 为文件名保存到当前目录(base)
下:
/* 最简单的窗口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();
return FALSE;
}
(3) 编辑Makefile 输入如下代码:
CC =
gccall:
$(CC) -o
base
base.c
'pkg-conf
ig
--cflags
--libs
gtk+-2.0'
注意:$(cc)前面不是空格,而是一个 键,如果用空格代替编译时会出问题。
以Makefile 为文件名保存到base 目录下。
(4) 在终端中执行make 命令开始编译;
(5) 编译结束后,执行命令./base 即可运行此程序,运行结果如图1.1 所示:
1
2
图1.1 最简单的窗口
(1) 设置include 文件与声明主函数