Chinaunix首页 | 论坛 | 博客
  • 博客访问: 915198
  • 博文数量: 380
  • 博客积分: 3495
  • 博客等级: 中校
  • 技术积分: 3996
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-02 09:35
文章分类

全部博文(380)

文章存档

2015年(2)

2014年(5)

2013年(9)

2012年(9)

2011年(67)

2010年(103)

2009年(182)

2008年(3)

我的朋友

分类: C/C++

2009-02-21 20:50:51

本人开始学习GTK+ 2.0 Tutorial
英文原址http://library.gnome.org/devel/gtk-tutorial/stable/

下面是第一个程序的源码。

----------base.c---------------
#include    //包含文件

int main( int argc,
char *argv[] )
{
GtkWidget *window; //声明窗口指针

gtk_init (&argc, &argv); //调用gtk的初始化函数,基本上在gtk程序中都要先调用它来初始化函数库

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);//创建一个新的窗口
gtk_widget_show (window); //显示此窗口

gtk_main (); //调用消息处理函数,稍后再详细解说此函数

return 0;
}
编译命令:
gcc base.c -o base `pkg-config --cflags --libs gtk+-2.0`

从程序上看很简单,基本上就是创建一个窗口,然后再显示出来。
不过编译命令就有些特别了,对于没有接触过GCC编译的人来讲。
gcc  GCC编译程序
base.c 源文件
-o base 指定输出文件,也就是可执行程序的名字,如果不指定通常是a.out
`pkg-config --cflags --libs gtk+-2.0` 得到gtk编译与链接要用到的库地址。
pkg-config本身是个命令,用这个命令可以从事先配置好的数据库中得到编译库,链接库的地址。
有兴趣的童鞋可以用man pkg-config来看一下详细的说明,
可以得到好多东西。

-------------------helloworld.c--------------------
#include 

/* This is a callback function. The data arguments are ignored
* in this example. More on callbacks below. */
static void hello( GtkWidget *widget,
gpointer data )
{
g_print ("Hello World\n");
}

static gboolean delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
/* If you return FALSE in the "delete_event" signal handler,
* GTK will emit the "destroy" signal. Returning TRUE means
* you don't want the window to be destroyed.
* This is useful for popping up 'are you sure you want to quit?'
* type dialogs. */

g_print ("delete event occurred\n");

/* Change TRUE to FALSE and the main window will be destroyed with
* a "delete_event". */

return TRUE;
}

/* Another callback */
static void destroy( GtkWidget *widget,
gpointer data )
{
gtk_main_quit ();
}

int main( int argc,
char *argv[] )
{
/* GtkWidget is the storage type for widgets */
GtkWidget *window;
GtkWidget *button;

/* This is called in all GTK applications. Arguments are parsed
* from the command line and are returned to the application. */
gtk_init (&argc, &argv);

/* create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

/* When the window is given the "delete_event" signal (this is given
* by the window manager, usually by the "close" option, or on the
* titlebar), we ask it to call the delete_event () function
* as defined above. The data passed to the callback
* function is NULL and is ignored in the callback function. */
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);

/* Here we connect the "destroy" event to a signal handler.
* This event occurs when we call gtk_widget_destroy() on the window,
* or if we return FALSE in the "delete_event" callback. */
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (destroy), NULL);

/* Sets the border width of the window. */
gtk_container_set_border_width (GTK_CONTAINER (window), 10);

/* Creates a new button with the label "Hello World". */
button = gtk_button_new_with_label ("Hello World");

/* When the button receives the "clicked" signal, it will call the
* function hello() passing it NULL as its argument. The hello()
* function is defined above. */
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (hello), NULL);

/* This will cause the window to be destroyed by calling
* gtk_widget_destroy(window) when "clicked". Again, the destroy
* signal could come from here, or the window manager. */
g_signal_connect_swapped (G_OBJECT (button), "clicked",
G_CALLBACK (gtk_widget_destroy),
G_OBJECT (window));

/* This packs the button into the window (a gtk container). */
gtk_container_add (GTK_CONTAINER (window), button);

/* The final step is to display this newly created widget. */
gtk_widget_show (button);

/* and the window */
gtk_widget_show (window);

/* All GTK applications must have a gtk_main(). Control ends here
* and waits for an event to occur (like a key press or
* mouse event). */
gtk_main ();

return 0;
}
从上面的文件上可以看出,所有的GTK程序消息处理 都是依赖于callback函数的。
相应的处理 函数就是调用g_signal_connect(window, event , callback,para)
基本上还是比较简单的。


阅读(539) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~