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 号
http://www.tup.com.cn
http://www.tup.tsinghua.edu.cn
出 版 者:清华大学出版社(北京清华大学学研大厦,邮编 100084)
责任编辑:张彦青
印 刷 者:
发 行 者:新华书店总店北京发行所
开 本: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
IV
GTK+2.0 编程范例
第 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 提供一种用最短的代码来编写窗口和控件的方法,还有灵活易用的信号/回调
函数机制。通过本章的学习,读者能够创建简单的用户界面,编写一般的回调函数,理解
信号/回调函数机制。
本章主要内容:
如何使用窗口控件
如何使用容器控件
如何使用按钮控件
如何使用标签、图像控件
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,接着创
2
GTK+2.0 编程范例
建本章的工作目录 1,然后再创建本节的工作目录 base,进入此目录开始工作。
(2) 打开编辑器(GEDIT2.0 见前言)。输入如下代码,以 base.c 为文件名保存到当前目
录(base)下:
/* 最简单的窗口base.c */
#include
int main ( int argc , char* argv[])
{
GtkWidget *window;
return FALSE;
}
gtk_init(&argc,&argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_show(window);
gtk_main();
(3) 编辑 Makefile 输入如下代码:
CC = gcc
all:
$(CC) -o base base.c 'pkg-config --cflags --libs gtk+-2.0'
注意: $(cc)前面不是空格,而是一个键,如果用空格代替编译时会出问题。
以 Makefile 为文件名保存到 base 目录下。
(4) 在终端中执行 make 命令开始编译;
(5) 编译结束后,执行命令./base 即可运行此程序,运行结果如图 1.1 所示:
图 1.1 最简单的窗口
(1) 设置 include 文件与声明主函数
首先是#include 语句,这是每个 GTK+2.0 程序都要包含的头文件。然后是
函数声明 int main ( int argc , char* argv[]),这是标准的 C 语言主函数的声明。
(2) 声明变量
GtkWidget *window; 声明了窗口控件的指针。其中 GtkWidget 是 GTK+2.0 控件类型,