因为工作需要,最近开始学习 GTK+ 编程。
本文主要是把笔者这两周以来自己所理解的内容总结一下。如果能对像笔者一样的 GTK+ 初学者有些帮助,善莫大焉。
1. 什么是 GTK 和 GTK+
GTK 是一个在图形化编程中使用的库(a library for creating graphical user interfaces)。比如C语言可以直接通过“#include ”来使用这个库里的API,从而生成各种各样的窗口。
GTK+ 是 GTK 的改进版本,因为改进地比较显著,所以增添了一个加号用以突出表示。一般情况下,我们说 GTK 编程也就是指 GTK+ 编程。另外,GTK+ 基于GPL协议。
GTK+ 目前的最新版本是2.20,其官方下载地址是:。
最后需要说明的是,GTK+ 已经可以支持Windows系统和Mac系统。不过,笔者对GTK+的学习是基于Linux系统的,具体来说是 Ubuntu 10.04。
2. X Window System
(1)X Window System 简介
Unix Like系统的GUI子系统基于视窗(Window)界面,所以被称为Window System。
X Window System 是Unix Like系统最新的一个GUI,由MIT在1984年开发出来。之所以叫“X",是因为英文字母”X“在”W“(indow)之后,寓意指下一版本的GUI系统。
(2)X Window System 组成
X Window System 主要由四个部分组成,分别是 X Server/X Client/Window Manager/Display Manager。
以Ubuntu为例逐一解释:
X Server: 管理与显示有关的硬件,并负责具体的绘图功能,并将用户操作转化为事件发送给X Client。Ubuntu中对应于Xorg。
X Client: 负责处理X Server发来的事件,再将处理结果发给X Server以控制其绘图。Ubuntu中各种GUI程序都是X Client,如主界面GNOME(Xubuntu用XFCE)。
Window Manager: 负责管理各窗口界面的管理,如大小化、边框等。Ubuntu中对应于Compiz(Ubuntu7.10前使用metacity)。
Display Manager: 提供GUI登陆环境,并载入User的Window Manager和language等资料。Ubuntu中对应于GDM。
(3)X Window System 架构
X Window System 采用C/S的架构。不过跟一般的C/S架构不一样,在X Window System 中,因为X server 是用来显示的部分,所以每一个客户端都安装有一个X server, 而服务器端安装的是X client, 用以接收客户端的事件处理请求并返回数据(处理结果),从而控制X server的绘图。
不过一般来说,我们都在同一台电脑上工作,所以X server 和 X client都运行在同一台电脑上。
这里关于X Window System的内容,笔者参考了:
3. GTK+ 编程架构
(1)GTK+ 和 X Window System 的关系
为什么前面首先解释了X Window System? 那是因为所有的 GTK+ 程序都是基于X Window System 而运行的。具体来说,GTK+ 程序就相当于X Window System 里面的 X Client. 也因此,要想运行一个GTK+ 程序,必须提前安装好X server 和 Window Manager.
(2)GTK+/GDK/GLIB/XLIB 的关系
初学者往往搞不清GTK+/GDK/GLIB/XLIB这四者的关系。如下图:
图一, Xlib 及其应用
根据上图所示,我们可以这样理解GTK+/GDK/GLIB/XLIB这四者的关系:
(a)Xlib 是一个客户端的C语言接口库,它封装了X协议,并对应用程序提供方便使用的API。使用Xlib,应用程序不直接向服务器发生请求和处理回复。Xlib把应用程序的图形操作转化为发送给Xserver的请求。Xlib和Xserver之间的通信是异步的。
同时应该从图一中看到,Xlib不止可以支持GTK+,还可以支持其他高层图形库。
(b)GDK 是标准Xlib函数调用的一个基本封装。Xlib比较底层,所以直接使用Xlib编程会比较困难。GDK 代码包含于GTK+ 模块之中。
(c)GLIB 是一个提供了一系列函数(functions)和定义(definitions)的函数库。设计GDK和GTK程序经常要用到GLib库里的函数。
(d)GTK+ 是一个小型而高效的控件库。GTK+ 作为GDK 的上层,程序员可以很容易使用,也大大提高了编程效率。当然,因为GTK+ 封装地太高级,程序员仅仅通过使用GTK+ 很难理解X Window System的工作过程。
补充: 在笔者的编译环境里,Xlib,Glib,GTK+/GDK都是以库的形式存在。
(3)GTK+ 程序的编写
如上面所讲,GTK+ 是一个基于Xlib的控件库。因此我们的程序就只需要使用GTK+ 的API去写。
一个简单的GTK+程序:
<--文章完-->
阅读(4060) | 评论(0) | 转发(0) |