#include <gtk-2.0/gtk/gtk.h>
/* 回调函数在本例中忽略了传递给程序的所有参数。下面是回调函数 */
void hello(GtkWidget *widget, gpointer data)
{
	g_print("Hello World\n");
}
gint delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
{
	/* 如果在"delete_event"处理程序中返回FALSE,
	 * GTK将引发一个"destory"信号,
	 * 返回TRUE意味着你不想关闭窗口。
	 * 这些在弹出"你真的要退出?"对话框时很有作用*/
	g_print("delete event occurred\n");
	/* 将TRUE改为FALSE,主窗口就会用一个"delete_event"信号,然后退出*/
	return(TRUE);
}
/* 另一个回调函数 */
void destory(GtkWidget *widget, gpointer data)
{
	gtk_main_quit();
}
int main(int argc, char *argv[])
{
	/* GtkWidget是构件的存储类型 */
	GtkWidget *window;
	GtkWidget *button;
	/* 在所有的Gtk应用程序中都应该调用。
	 * 它的作用是解析由命令行传递进来的参数并将它返回给应用程序*/
	gtk_init(&argc, &argv);
	/* 创建一个主窗口 */
	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	/* 当给窗口一个"delete_event"信号时
	 * (这个信号是由窗口管理器发出的,
	 * 通常是在窗口标题条右边的"x"按钮,
	 * 或者在标题条的快捷菜单上选择"close"选项时发出的),
	 * 我们要求调用上面定义的delete_event()函数
	 * 传递给这个回调函数的数据是NULL,回调函数会忽略这个参数*/
	gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(delete_event), NULL);
	/* 这里,我们给"destory"事件连接一个信号处理函数,
	 * 当我们在窗口上调用gtk_widget_destory()函数
	 * 或者在"delete_event"事件的回调函数中返回FALSE时会发生这个事件*/
	gtk_signal_connect(GTK_OBJECT(window), "destory", GTK_SIGNAL_FUNC(destory), NULL);
	/* 设置窗口的边框宽度 */
	gtk_container_set_border_width(GTK_CONTAINER(window), 10);
	/* 创建一个标题为"Hello World"的按钮 */
	button = gtk_button_new_with_label("Hello World");
	/* 当按钮接收到"clicked"时,它会调用hello()函数,
	 * 传递的参数为NULL。函数hello()是在上面定义的 */
	gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(hello), NULL);
	/* 当点击按钮时,通过调用gtk_widget_destroy(window)函数销毁窗口
	 * 另外,"destory"信号可以从这里发出,也可以来自于窗口管理器*/
	gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(window));
	/* 将按钮组装到窗口中(一个gtk容器中) */
	gtk_container_add(GTK_CONTAINER(window), button);
	/* 最后一步就是显示新创建的构件 */
	gtk_widget_show(button);
	/* 显示窗口 */
	gtk_widget_show(window);
	/* 所有的GTK应用程序都应该有一个gtk_main()函数。
	 * 程序的控制权停在这里并等着事件的发生(比如一次按键或鼠标事件)*/
	gtk_main();
	return(0);
}

 编译:

gcc -Wall -g helloworld.c -o helloworld `pkg-config --cflags --libs gtk+-2.0`

 点击窗口的“X”按钮,因为回调函数delete_event中最后返回的是TRUE,因此将在后台看到输出"delete event occurred“,而窗口并不会关闭,将返回值改为FALSE,重新编译,点击“X”按钮,后台仍然输出"delete event occurred“但同时窗口关闭,而如果点击"Hello World"按钮,后台输出“Hello World”同时窗口关闭