Chinaunix首页 | 论坛 | 博客
  • 博客访问: 206585
  • 博文数量: 32
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 295
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-06 20:47
文章分类

全部博文(32)

文章存档

2009年(11)

2008年(21)

我的朋友

分类: LINUX

2009-02-18 09:39:07

1.Gtk 简介
    GTK (GIMP Toolkit) 是一套用于创建图形用户界面的工具包。它遵循 LGPL 许可证,所以可以用它来开发开源软件、自由软件,甚至是封闭源代码的商业软件,而不用花费任何费用来购买许可证和使用权。当前,GTK已经被成功地应用到 了大量的自由软件及商业软件中,已经取得了很大的成功。
    当前,GTK主要由几大组件构成:
*Gtk+:GTK的主要构件,包括所有的图形控件及大量实用的API。
*Glib:包含一些标准函数的替代函数,以及一些处理链表等数据结构的函数等。这些替代函数被用来增强GTK 的可移植性,同时提供 libc 的对应函数的增强版本。
*Pango:该组件用来处理国际化文字输出。
   GTK是一个跨平台的GUI开发库, 它是用C语言以OO的方式(俗称面向对象C, 又称OO-C)开发的. 只要是有一定C语言和GUI开发基础, 用GTK是一件很简单的事.
2.安装与配置
   笔者的操作系统为ubuntu 8.04
sudo apt-get install build-essential       #这将安装gcc/g++/gdb/make 等基本编程工具
sudo apt-get install gnome-core-devel  #这将安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件
sudo apt-get install pkg-config            #用于在编译GTK程序时自动找出头文件及库文件位置
sudo apt-get install devhelp                 #这将安装 devhelp GTK文档查看程序
sudo apt-get install libglib2.0-doc libgtk2.0-doc  #这将安装 gtk/glib 的API参考手册及其它帮助文档
sudo apt-get instal glade libglade2-dev #这将安装基于GTK的界面构造程序
运行如下命令检查安装:
pkg-config --cflags gtk+-2.0
-I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/include/pixman-1
pkg-config --libs gtk+-2.0
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
3.实例

#include <gtk/gtk.h>

int main(int argc, char *argv[])
{
    
/* A window and a button */
    GtkWidget 
*win, *btn;

    
/* Initialize GTK */
    gtk_init(
&argc, &argv);

    
/* New a window and a button */
    win 
= gtk_window_new(GTK_WINDOW_TOPLEVEL);
    btn 
= gtk_button_new_with_label("Close yourself");
    
    
/* Add button to window container */
    gtk_container_add(GTK_CONTAINER(win), btn);

    
/* Connect "close" and button to quit op */
    g_signal_connect(win, 
"destroy", G_CALLBACK(gtk_main_quit), NULL);
    g_signal_connect(btn, 
"clicked", G_CALLBACK(gtk_main_quit), NULL);

    
/* Show all in the window */
    gtk_widget_show_all(win);

    
/* Main loop, wait for signals */
    gtk_main();

    
return 0;
}
上面的程序为main.c, 它所完成的功能就是创建一个窗口(window), 在窗口中添加一个按钮(button), 点击这个button或者是窗口的关闭按钮, 就会实现窗口的关闭, 并使程序结束.
这几行代码很简单, 主要有几个关键:
  • GtkWidget: 创建一个窗口和一个按钮. GTK中的控件都要用GtkWidget类型创建.
  • gtk_init(): 对程序用命令行参数进行初始化.
  • gtk_xxx_new(): 新建xxx类型的控件
  • gtk_container_add(): 把控件添加到container容器中, 在这里是把按钮添加到窗口中.
  • g_signal_connect(): 把GTK控件对应的操作信号, 连接到CALLBACK函数上.
  • gtk_widget_show_all(): 显示窗口.
  • gtk_main(): 开始main loop, 等待信号触发事件.
4. 编译
我用一个makefile来展示编译命令.
# Target, compiler and objects.
EXEC   
= test
CC     
= gcc
OBJ    
= main.o

# Use 
for compile.
CFLAGS 
= `pkg-config --cflags gtk+-2.0`
# Use 
for link.
CLIBS  
= `pkg-config --libs gtk+-2.0`

$(EXEC): $(OBJ)
    $(CC) 
-o $@ $^ $(CLIBS)

main.o: main.c
    $(CC) 
-c $< $(CFLAGS)

clean:
    rm $(EXEC) 
*.o
这里于普通的makefile不同的地方是CFLAGS和CLIBS两个变量, 分别用于编译和链接.
用`......`引用pkg-config实现参数的flags.
在编译时只需要在终端下执行make命令, 就会在目录下生成test可执行文件.



阅读(2593) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~