Chinaunix首页 | 论坛 | 博客
  • 博客访问: 402427
  • 博文数量: 65
  • 博客积分: 1491
  • 博客等级: 上尉
  • 技术积分: 702
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-30 15:57
文章分类
文章存档

2011年(6)

2010年(12)

2009年(47)

我的朋友

分类: 嵌入式

2010-07-02 15:16:21

因为工作需要,最近开始学习 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+ 的学习资料主要有两个,一个是"GTK+ 2.0 Tutorial", 网上可以找到中文版,这个资料是GTK入门指导,建议初学者先看这个;另一个是"GTK+ Reference Manual",笔者还没找到中文版,这个资料是GTK函数手册,方便编程时查阅。
      最后需要说明的是,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+程序

<--文章完-->
阅读(3967) | 评论(0) | 转发(0) |
0

上一篇:触摸屏了解

下一篇:tcpdump 实例分析

给主人留下些什么吧!~~