免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1775 | 回复: 5
打印 上一主题 下一主题

[C] GTK 问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-27 17:07 |只看该作者 |倒序浏览
#include <gtk/gtk.h>

gint hello(GtkWidget *widget,gpointer data){
g_print("传递进来的消息是:%s\n",(gchar *)data);
gtk_main_quit();
return FALSE;
}

int main(int argc,char *argv[]){
GtkWidget *window_main;
GtkWidget *button_exit;
gtk_init(&argc,&argv);
window_main=gtk_window_new(GTK_WINDOW_TOPLEVEL);
button_exit=gtk_button_new_with_label("Exit");

gtk_window_set_title(GTK_WINDOW(window_main),"Hello,Window!");
gtk_window_set_default_size(GTK_WINDOW(window_main),200,200);
gtk_container_add(GTK_CONTAINER(window_main),button_exit);

g_signal_connect(G_OBJECT(button_exit),"clicked",G_CALLBACK(hello),"你点EXIT按钮关闭的!");
g_signal_connect(G_OBJECT(window_main),"delete_event",G_CALLBACK(hello),"你点的窗口按钮关闭的!");

gtk_widget_show_all(window_main);

gtk_main();

return 0;

}


为什么不会出现  "你点的窗口按钮关闭的!“  这个字符串没有传递过去吗

论坛徽章:
0
2 [报告]
发表于 2008-09-27 17:19 |只看该作者
当gtk_main_quit的时候,并不会产生delete_event事件,你可以点击关闭按钮(假如你的windows manager有关闭按钮的话)来触发这个事件。

另外,window的delete_event的回调参数第三项还是传进去的自定义参数值。

试试这样写:
<code>
#include <gtk/gtk.h>

gint
hello (GtkWidget * widget, gpointer data, gpointer data2)
{
  g_print ("传递进来的消息是:%s\n", (gchar *) data);
  gtk_main_quit ();
  return FALSE;
}

gint
hello2 (GtkWidget * widget, gpointer data, gpointer data2)
{
  g_print ("传递进来的消息是:%s\n", (gchar *) data2);
  gtk_main_quit ();
  return FALSE;
}

int
main (int argc, char *argv[])
{
  GtkWidget *window_main;
  GtkWidget *button_exit;
  gtk_init (&argc, &argv);
  window_main = gtk_window_new (GTK_WINDOW_TOPLEVEL);
  button_exit = gtk_button_new_with_label ("Exit");

  gtk_window_set_title (GTK_WINDOW (window_main), "Hello,Window!");
  gtk_window_set_default_size (GTK_WINDOW (window_main), 200, 200);
  gtk_container_add (GTK_CONTAINER (window_main), button_exit);

  g_signal_connect (G_OBJECT (button_exit), "clicked", G_CALLBACK (hello),
                    "你点EXIT按钮关闭的!");
  g_signal_connect (G_OBJECT (window_main), "delete_event",
                    G_CALLBACK (hello2), "你点的窗口按钮关闭的!");

  gtk_widget_show_all (window_main);

  gtk_main ();

  return 0;
}
</code>

论坛徽章:
0
3 [报告]
发表于 2008-09-27 18:02 |只看该作者
gint hello(GtkWidget *widget,gpointer data,)
改成
gint hello(GtkWidget *widget,gpointer data,gpointer data2)

就好了,奇怪!

论坛徽章:
0
4 [报告]
发表于 2008-09-27 21:12 |只看该作者
没人说个根本原因吗

论坛徽章:
0
5 [报告]
发表于 2008-09-28 09:17 |只看该作者
跟你说的很明白,回调函数有三个参数。第三个才是你传进去的参数啊!

论坛徽章:
0
6 [报告]
发表于 2008-09-28 09:36 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP