GTK+采用具有OO特色的C语言">开发框架,这使它在开发GUI应用程序能和操作系统紧密结合,同时具有很大简洁性,其中的很多代码只要简单的复制和更改即可完成,只用一个C源代码文件就可以创建一个LINUX下的GUI程序。
GNOME Desktop
用GTK++写的HelloWorld
下面的代码是笔者用GTK+编写的一个HelloWorld例程,编译后运行显示一个带按钮的窗口,点击按钮会弹出提示信息对话框。
//hello.c #include <gtk/gtk.h> //主窗口中按钮的回调函数 void on_button_clicked(GtkWidget* button, gpointer
userdata) { GtkWidget *dialog; //创建带确认按钮的对话框,父控件为空 dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL |GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, (gchar*)userdata); gtk_dialog_run(GTK_DIALOG(dialog));//显示并运行对话框 gtk_widget_destroy(dialog);//销毁对话框 } //主函数 int main(int argc, char* argv[]) { GtkWidget *window, *button; //初始化GTK+程序 gtk_init(&argc, &argv); //创建窗口,并为窗口的关闭信号加回调函数以便退出 window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(window),"delete_event", G_CALLBACK(gtk_main_quit),NULL); gtk_window_set_title(GTK_WINDOW(window),"Hello World!"); gtk_container_set_border_w
idth(GTK_CONTAINER(window),10); //创建按钮控件,为单击信号加回调函数,将其放入窗口中 button=gtk_button_new_with_label("Hello World!"); g_signal_connect(G_OBJECT(button),"clicked", G_CALLBACK(on_button_clicked),(gpointer)"你好!\n自由的世界。"); gtk_container_add(GTK_CONTAINER(window),button); //下面函数显示窗口控件同时显示其中的所有其它控件 gtk_widget_show_all(window); gtk_main(); return FALSE; }
可以直接用命令"gcc `pkg-config -cflags -libs gtk+2.0` hello.c -o hello"来编译上面的代码,但最好做一个Makefile文件内容如下:
CC = gcc all: $(CC) `pkg-config --cflags --libs gtk+-2.0` hello.c -o hello
这样的话可以用make命令来编译,使得简单了许多,也不容易出错了。再次强调的是关于引号的问题,很多初学者常犯这个错误,[`]是[~]下面的那个单引号,而非['];这涉及到了LINUX SHELL编程中的命令引用,LINUX下的标准的BASH是支持命令引用的,而其它的SHELL就不一定了。