GTK+的第一个应用Hello,World
转载请注明本文出处: http://www.cnblogs.com/build/archive/2010/12/03/gtk-hello-world-1.html
在Fedora上搭建好开发环境之后,接下来就应该是一个Hello World,用GTK来和这个世界打个招呼。
在Eclipse中新建一个C Project,然后添加一个helloword.c
1 #include < gtk/gtk.h >
2 int main (int argc, char *argv[])
3 {
4 GtkWidget *window;
5 /* 初始化 GTK+ 和所有类. */
6 gtk_init (&argc, &argv);
7 /* 创建一个新窗口, 设定一个标题,并展示出来. */
8 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9 gtk_window_set_title (GTK_WINDOW (window), "Hello World");
10 gtk_widget_show (window);
11 /* 通过主循环处理 */
12 gtk_main ();
13 return 0;
14 }
2 int main (int argc, char *argv[])
3 {
4 GtkWidget *window;
5 /* 初始化 GTK+ 和所有类. */
6 gtk_init (&argc, &argv);
7 /* 创建一个新窗口, 设定一个标题,并展示出来. */
8 window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
9 gtk_window_set_title (GTK_WINDOW (window), "Hello World");
10 gtk_widget_show (window);
11 /* 通过主循环处理 */
12 gtk_main ();
13 return 0;
14 }
保存,然后编译(Ctrl+B),如果发生 to generate dependencies you must specify either -M or -MM 错误,请参看其中的解决方法
最后运行,会看到一个标题栏是Hello World的空白窗口。这个时候,虽然在窗口的右上角有一个关闭的图标,但这个图标却无法正确的关闭应用程序,可以在eclipse的状态看出来
只有在按下这个红色的停止按钮之后,应用程序才会真正的退出来。
gtk_init()
通过调用gtk_init(),可以搞定所有的初始化工作,当然了,这个东西也是可以自己定制的(开源的么),后文会介绍。
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
生成一个我们需要的实例,GtkWidget* gtk_window_new (GtkWindowType type),很明显一个工厂模式,GtkWindowType是继承于GtkWidget的。稍后会研究一下每个对象的继承关系。
gtk_window_set_title (GTK_WINDOW (window), "Hello World");
gtk_widget_show (window);
这两句就是设置窗口的一些属性,并展示出来。
gtk_main ();
这个函数是一个循环,这个循环的作用是通过处理一些消息来对应用程序进行相应的处理,这就里就解释了,为什么关闭窗口后,程序并没有真正的推出,因为关闭窗口的消息之杂Xserver层处理了,而在应用层面却没有任何处理,所以,我们只看到了窗口消失,而程序却依然运行
后面我们会看看GTK是如何处理消息和事件的。