第一个gtk程序 有点疑问

软件和网站开发以及相关技术探讨
回复
lpzgbd
帖子: 52
注册时间: 2007-02-14 13:56
来自: swust

第一个gtk程序 有点疑问

#1

帖子 lpzgbd » 2007-08-10 9:32

//以下是我的第一个gtk程序,从书上抄下来的
#include <gtk/gtk.h>
void hello(GtkWidget *widget,gpointer data){
g_print("Hello World\n");
}
gint delete_event(GtkWidget *widget,GdkEvent *enent,gpointer data){
g_print("detele event occured\n");
return(FALSE);
}
void destroy(GtkWidget *widget,gpointer data){
g_print("destroy event occured\n");
gtk_main_quit();
}
int main(int argc,char *argv[]){
GtkWidget *window;
GtkWidget *button;
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(destroy),NULL);//请注意这里
gtk_signal_connect(GTK_OBJECT(window),"delete_event",GTK_SIGNAL_FUNC(delete_event),NULL);

gtk_container_set_border_width(GTK_CONTAINER(window),40);
button=gtk_button_new_with_label("Hello World");
gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(hello),NULL);
gtk_signal_connect_object(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),GTK_OBJECT(window));//请注意这里
gtk_container_add(GTK_CONTAINER(window),button);
gtk_widget_show(button);
gtk_widget_show(window);
gtk_main();
return 0;
}
请大家注意我加注释的那行,我的问题是为什么第一个的参数是GTK_SIGNAL_FUNC(destroy),而另一个的参数是GTK_SIGNAL_FUNC(gtk_widget_destroy)呢 ?gtk_widget_destroy我并没有定义呀,那么它又是在哪里定义的呢? 谢谢!
gothicane
帖子: 157
注册时间: 2006-08-29 10:31

#2

帖子 gothicane » 2007-08-10 13:42

gtk_widget_destroy 是GTK+ 自己的函数,GTK_OBJECT(window) 表示传给他的参数是 window ,整个意思就是相当于执行:
gtk_widget_destroy (window);
lpzgbd
帖子: 52
注册时间: 2007-02-14 13:56
来自: swust

#3

帖子 lpzgbd » 2007-08-11 9:24

谢谢楼上的
不过 既然是GTK+自己的函数,那为什么我在点button后他会调用destroy我这个自己定义的函数呢?
头像
hanjingshu
帖子: 2
注册时间: 2007-05-23 7:54

#4

帖子 hanjingshu » 2007-08-11 10:32

点button后不会调用destroy函数,调用了gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(hello),NULL); 和我们关注的语句;

但windows结束后会调用,gtk_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(destroy),NULL);还有gtk_signal_connect(GTK_OBJECT(window),"delete_event",GTK_SIGNAL_FUNC(delete_event),NULL);


相关语句却可以关闭gtk_signal_connect_object(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),GTK_OBJECT(window));


我是这样认为的,共同学习了。希望有帮助。
头像
蓝蓝
帖子: 953
注册时间: 2007-06-09 9:19
来自: 上海

#5

帖子 蓝蓝 » 2007-08-11 12:15

。。。。。。。。。。。
太阳好毒…….
lpzgbd
帖子: 52
注册时间: 2007-02-14 13:56
来自: swust

#6

帖子 lpzgbd » 2007-08-11 15:00

hanjingshu 写了:点button后不会调用destroy函数,调用了gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(hello),NULL); 和我们关注的语句;

但windows结束后会调用,gtk_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(destroy),NULL);还有gtk_signal_connect(GTK_OBJECT(window),"delete_event",GTK_SIGNAL_FUNC(delete_event),NULL);


相关语句却可以关闭gtk_signal_connect_object(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(gtk_widget_destroy),GTK_OBJECT(window));


我是这样认为的,共同学习了。希望有帮助。
我一下子就明白了 ,非常感谢你的帮助!
回复