免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: chinesedragon
打印 上一主题 下一主题

[C] GTK+2.0编程范例上的一个例子,编译不过 [复制链接]

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
21 [报告]
发表于 2012-07-27 11:22 |只看该作者
执行成功。说几个问题。

1. 你callback后面那些"退出","关于"神马的,人家要gint呢,你给字符串搞毛……统统改成0,警告木有了。
2. 链接错误,说callback找不到,给了个空实现,OK。
3. 报运行时错误,说branck咋地咋地,回头一看,你拼错了丫的……

最后运行完全正常~~

论坛徽章:
0
22 [报告]
发表于 2012-07-27 11:25 |只看该作者
to starwing83:
人家要的是guint
to 楼主:
不明白你为什么要传字符串过去?

论坛徽章:
0
23 [报告]
发表于 2012-07-27 11:27 |只看该作者
好吧,我把回调函数的实现给出来。
  1. void on_menu_activate(GtkMenuItem *menu, gpointer data)
  2. {
  3.         gprint("Menu %s is pressed.\n", (gchar*)data);
  4. }
复制代码
kevin_zcwen 发表于 2012-07-27 11:25
to starwing83:
人家要的是guint
to 楼主:

论坛徽章:
0
24 [报告]
发表于 2012-07-27 11:38 |只看该作者
这个我不好给您解释需求,但是我请您 看一下这本书的第二章的第二篇,您可能就明白。回复 21# starwing83


   

GTK 2.0编程范例.pdf

9.19 MB, 下载次数: 17

论坛徽章:
0
25 [报告]
发表于 2012-07-27 11:42 |只看该作者
[code]
GtkItemFactoryCallback ()

void        (*GtkItemFactoryCallback)       ();

Warning

GtkItemFactoryCallback is deprecated and should not be used in newly-written code.

GtkItemFactoryCallback1 ()

void        (*GtkItemFactoryCallback1)      (gpointer callback_data,
                                             guint callback_action,
                                             GtkWidget *widget);

Warning

GtkItemFactoryCallback1 is deprecated and should not be used in newly-written code.

callback_data

论坛徽章:
0
26 [报告]
发表于 2012-07-27 11:45 |只看该作者
可是在GtkItemFactoryEntry这个结构体中用的是GtkItemFactoryCallback这个啊回复 25# kevin_zcwen


   

论坛徽章:
0
27 [报告]
发表于 2012-07-27 11:46 |只看该作者
http://www.gtk.org/api/2.6/gtk/GtkItemFactory.html
你在这个页面找下GtkItemFactoryCallback,看看官方给的介绍
另外可能gtk版本方面会不会有所影响

论坛徽章:
0
28 [报告]
发表于 2012-07-27 11:54 |只看该作者
这个我真看不出来什么了,不知道这本书上用的是什么版本。毕竟这本书可能有点年头了
kevin_zcwen 发表于 2012-07-27 11:46
http://www.gtk.org/api/2.6/gtk/GtkItemFactory.html
你在这个页面找下GtkItemFactoryCallback,看看官方给 ...

论坛徽章:
0
29 [报告]
发表于 2012-07-27 11:58 |只看该作者
吃午饭了,这问题。。。。。。。。。。。。。。。。。。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
30 [报告]
发表于 2012-07-27 12:11 |只看该作者
都是被废弃掉的啊………………

那你只能试下这个了:
  1. #include <gtk/gtk.h>

  2. void on_menu_activate(GtkMenuItem *menu, gpointer data);

  3. static GtkItemFactoryEntry menu_items[] = {
  4.     {"/文件(_F)",NULL,NULL,0,"<Branch>"},
  5.     {"/文件(_F)/新建",NULL,on_menu_activate,0,"<StockItem>",GTK_STOCK_NEW},
  6.     {"/文件(_F)/-",NULL,NULL,0,"<Separator>"},
  7.     {"/文件(_F)/退出",NULL,on_menu_activate,(guint)"退出","<StockItem>",GTK_STOCK_QUIT},
  8.     {"/编辑(_E)",NULL,NULL,0,"<Branch>"},
  9.     {"/编辑(_E)/复制",NULL,on_menu_activate,(guint)"复制","<StockItem>",GTK_STOCK_COPY},
  10.     {"/帮助(_H)",NULL,NULL,0,"<Branch>"},
  11.     {"/帮助(_H)/关于",NULL,on_menu_activate,(guint)"关于","<StockItem>",GTK_STOCK_ABOUT}
  12. };

  13. void on_menu_activate(GtkMenuItem *menu, gpointer data)
  14. {
  15.         printf("Menu %s is pressed.\n", (gchar*)data);
  16. }

  17. int main ( int argc, char *argv[] )
  18. {
  19.     GtkWidget *window;
  20.     GtkWidget *box;
  21.     GtkWidget *menubar;
  22.     GtkAccelGroup *accel_group;
  23.     GtkItemFactory *item_factory;
  24.     gint items_count = 8;

  25.     gtk_init(&argc, &argv);

  26.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  27.     g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),
  28.             NULL);
  29.     gtk_window_set_title(GTK_WINDOW(window), "添加菜单的快捷方式");

  30.     accel_group = gtk_accel_group_new();
  31.     gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);

  32.     box = gtk_vbox_new(FALSE, 0);
  33.     gtk_container_add(GTK_CONTAINER(window), box);

  34.     item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,"<main>",accel_group);
  35.     gtk_item_factory_create_items(item_factory, items_count, menu_items, NULL);
  36.     menubar = gtk_item_factory_get_widget(item_factory, "<main>");

  37.     gtk_box_pack_start(GTK_BOX(box), menubar, FALSE, FALSE, 0);

  38.     gtk_widget_show_all(window);

  39.     gtk_main();
  40.     return 0;
  41. }
  42. /* cc: libs+='`pkg-config --cflags --libs gtk+-2.0`' */
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP