GTK+ 编程笔记 (1) -- 编程架构 2010-07-02 15:16:21

GTK+ 编程笔记 (1) -- 编程架构 2010-07-02 15:16:21

分类: 嵌入式

因为工作需要,最近开始学习 GTK+ 编程。
本文主要是把笔者这两周以来自己所理解的内容总结一下。如果能对像笔者一样的 GTK+ 初学者有些帮助,善莫大焉。

1. 什么是 GTK 和 GTK+
      GTK 是一个在图形化编程中使用的库 (a library for creating graphical user interfaces)。比如C语言可以直接通过“#include <gtk/gtk.h>”来使用这个库里的API,从而生成各种各样的窗口。
      GTK+ 是 GTK 的改进版本,因为改进地比较显著,所以增添了一个加号用以突出表示。一般情况下,我们说 GTK 编程也就是指 GTK+ 编程。另外,GTK+ 基于GPL协议。
      GTK+ 目前的最新版本是2.20,其官方下载地址是: http://www.gtk.org/index.php
      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的内容,笔者 参考了: http://linux.vbird.org/linux_basic/0590xwindow.php

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去写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值