我们在终端上新建一个 .c文件,如demo.c,在文件里写如下内容:

    06_一个简单的空白窗口 - 图1

    写完代码后,我们对代码进程编译,直接用gcc编译即可,但是需要加上pkg-config --cflags --libs gtk+-2.0 ( ` 为数字1键前面的反引号 )。

    因为用gcc直接编译,默认只找标准库,而我们刚才写的代码需要依赖GTK相应的库。

    pkg-config 是一个为已经安装的包提供了include,以及实际库安装的位置编译选项的输出和管理的工具;
    
    --cflags 选项作用为自动获得预处理参数,如宏定义,头文件的位置;
    
    --libs 选项作用为自动获得链接参数,如库及依赖的其它库的位置,文件名及其它一些连接参数;
    
    gtk+-2.0 选项作用为指定GTK版本。

    具体编译命令如下:

    gcc  demo.c  -o  demo  `pkg-config --cflags --libs gtk+-2.0`

    编译结束后,我们运行程序,结果如下图的一个空白窗口:

    06_一个简单的空白窗口 - 图2

    接下来,我们一起来看一下代码的含义。

    我们以后写GTK代码时基本上都看到这个一个框架:

    06_一个简单的空白窗口 - 图3

    头文件〈gtk/gtk.h> 包括了GTK+中所有的控件、变量、函数和结构的声明。

    gtk_init (&argc, &argv); 所有 GTK应用程序都要调用该函数,而且必须在控件定义之前使用,它为我们设置一些缺省值( 例如视觉和颜色 )映射这个函数将函数库初始化,设置缺省的信号处理函数,并检查通过命令行传递给应用程序的参数,自动完成一些必要的初始化工作。

    gtk_main()是在每个Gtk应用程序都要调用的函数。程序运行停在这里等待事件(如键盘事件或鼠标事件)的发生,等待用户来操作窗口。

    而我们写的代码又是什么意思呢?

    GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    gtk_window_new()的功能创建一个窗口并返回这个窗口的控件指针。GTK_WINDOW_TOPLEVEL指明窗口的类型为最上层的主窗口,它最常用。接着创建一个GtkWidget *类型的window变量来接收。GtkWidget是GTK+控件类型,GtkWidget * 能指向任何控件的指针类型。

    gtk_widget_show(window);用来显示上一步创建的窗口控件。

    在这个简单例子里,所有事件都被忽略。用鼠标点击窗口右上角的“×”按钮也不能将窗口关闭。我们可以在终端敲 Ctrl + C 关闭程序。