|
程序代码:
#include <gtk/gtk.h>
/*定义回调函数,单击按钮时系统自动调用*/
void hello (GtkWidget *widget, gpointer *data)
{
g_print ("button clicked and data = %s\n", (char *)data);
}
/*定义回调函数destroy,关闭窗口时系统自动调用*/
void destroy(GtkWidget *widget, gpointer *data)
{
gtk_main_quit();
}
int main (int argc, char **argv)
{
/*定义指向控件的指针*/
GtkWidget *window;
GtkWidget *button;
/*初始化图形显示环境*/
gtk_init (&argc, &argv);
/*创建窗口,并设置当关闭窗口时,要执行的会调函数*/
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(destroy), NULL);
/*设置窗口的属性*/
gtk_container_border_width (GTK_CONTAINER(window), 80);
/*创建按钮,并设置按钮上的文字*/
button = gtk_button_new_with_label("hello world");
/*设置当单击按钮时,要执行的回调函数*/
g_signal_connect (GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(hello), "I love you");
/*将按钮加入到窗口中*/
gtk_container_add (GTK_CONTAINER(window), button);
/*显示按钮和窗口*/
gtk_widget_show (button);
gtk_widget_show (window);
/*进入消息处理循环*/
gtk_main();
return (0);
} 编译命令: gcc -o gtkwin.exe gtkwin.c `pkg-config --libs --cflags gtk+-2.0` 运行及输出:
![]()
说明:
1、由于操作系统是中文环境,程序中没有对字体进行处理,所以出现错误提示。
2、所有的 GTK+ 程序都必须包含头头文件 gtk/gtk.h ,它声明了所有 GTK+ 编程中要使用的常量、数据结构和函数。
3、所有 GTK+ 程序开始都要调用 gtk_init(gint &argc, gchar *** argv) 函数。该函数定位和打开图形显示,并对颜色、信号进行初始化。在命令行输入的参数由该函数传递给 GTK+ ,该函数读取并获得与它有关的命令行参数。
4、函数 gtk_window_new( GTK_WINDOW_TOPLEVEL) 用于创建顶极窗口,GTK+ 程序的主窗口被称为顶极窗口。虽然一个程序可以创建多个顶极窗口,但通常只创建一个。
5、图形界面下,用户的任何一个操作 ( 鼠标单击、按下键盘某键)都称为发生了一个事件,GTK+ 都有相应的小心信号产生,如果在程序中定义了处理该消息信号的函数,在事件发生后,消息信号处理函数会自动调用。这样的消息信号处理函数也称为回调函数,因为这种函数是在程序里定义,但程序中并没有显式调用而是由系统在事件发生后自动调用。
6、hello() 和 destroy() 就是两个处理消息的回调函数。destroy() 函数中调用了 GTK+ 函数 gtk_main_quit() ,此函数使程序退出 gtk_main() 并完成一些清理工作。
7、g_signal_connet() 函数用于在控件和消息处理函数间建立联系,该函数的第一个参数为产生消息的控件,第二个参数是消息名,第三个参数是消息发生后要调用的函数名,第四个参数是传递给消息处理函数的参数,可以为空值(NULL)。
8、gtk_container_border_width() 函数用于设置窗口边框宽度,这是一个设置窗口属性的函数。
9、net_button_new_with_label() 函数创建一个带文本标签的按钮,它完成内存分配,并把所分配到的内存的首地址赋给 GtkWidget 类型指针。
10、gtk_container_add() 通知 GTK+ 将按钮加入到主窗口中,函数 gtk_widget_show() 用于显示控件。
11、gtk_main() 使 GTK+ 进入消息处理循环。每个 GTK+ 应用程序都有一个 gtk_main() 函数,该函数使程序进入休眠状态。当有事件发生,如果程序中有相应的处理函数,gtk_main() 就调用相应的消息处理函数。
编译时所用的 pkg-config 参考:http://www.groad.net/bbs/read.ph ... 1&toread=1#2051
为了简单起见,可添加一个 Makefile 文件,其内容如下:
CC=gcc
program=gtkwin
LDLIBS=`pkg-config --libs gtk+-2.0`
CFLAGS= -Wall -g `pkg-config --cflags gtk+-2.0`
$(program):$(program).o
$(CC) $(LDLIBS) $(program).o -o $(program)
$(program).o:$(program).c
$(CC) $(CFLAGS) -c $(program).c
clean:
-rm -f $(program)
-rm -f *.o 以后,编译其他 GTK+ 程序时,只要将 gtkwin 改成要生成的文件名即可。 |
|