当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 第一个gtk程序 有点疑问
帖子发表于 : 2007-08-10 9:32 

注册: 2007-02-14 13:56
帖子: 52
地址: swust
送出感谢: 0 次
接收感谢: 0 次
//以下是我的第一个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我并没有定义呀,那么它又是在哪里定义的呢? 谢谢!


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-08-10 13:42 

注册: 2006-08-29 10:31
帖子: 157
送出感谢: 0 次
接收感谢: 0 次
gtk_widget_destroy 是GTK+ 自己的函数,GTK_OBJECT(window) 表示传给他的参数是 window ,整个意思就是相当于执行:
gtk_widget_destroy (window);


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-08-11 9:24 

注册: 2007-02-14 13:56
帖子: 52
地址: swust
送出感谢: 0 次
接收感谢: 0 次
谢谢楼上的
不过 既然是GTK+自己的函数,那为什么我在点button后他会调用destroy我这个自己定义的函数呢?


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-08-11 10:32 
头像

注册: 2007-05-23 7:54
帖子: 2
送出感谢: 0 次
接收感谢: 0 次
点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));


我是这样认为的,共同学习了。希望有帮助。


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-08-11 12:15 
头像

注册: 2007-06-09 9:19
帖子: 953
地址: 上海
送出感谢: 1
接收感谢: 0 次
。。。。。。。。。。。


_________________
太阳好毒…….


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-08-11 15:00 

注册: 2007-02-14 13:56
帖子: 52
地址: swust
送出感谢: 0 次
接收感谢: 0 次
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));


我是这样认为的,共同学习了。希望有帮助。

我一下子就明白了 ,非常感谢你的帮助!


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译