免费注册 查看新帖 |

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
1 [报告]
发表于 2012-07-27 11:22 |显示全部楼层
执行成功。说几个问题。

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

最后运行完全正常~~

论坛徽章:
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
2 [报告]
发表于 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`' */
复制代码

论坛徽章:
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
3 [报告]
发表于 2012-07-27 12:23 |显示全部楼层
回复 31# chinesedragon


    我这边没有任何警告。

论坛徽章:
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
4 [报告]
发表于 2012-07-27 12:27 |显示全部楼层
我懂了………你是64位的系统。

恩,那无解了,不过我还是有办法:
  1. #include <gtk/gtk.h>

  2. void on_menu_activate(GtkMenuItem *menu, guint action_data);

  3. static gchar *textlist[] = {
  4.     NULL,
  5.     "退出",
  6.     "复制",
  7.     "关于",
  8. };

  9. static GtkItemFactoryEntry menu_items[] = {
  10.     {"/文件(_F)",NULL,NULL,0,"<Branch>"},
  11.     {"/文件(_F)/新建",NULL,on_menu_activate,0,"<StockItem>",GTK_STOCK_NEW},
  12.     {"/文件(_F)/-",NULL,NULL,0,"<Separator>"},
  13.     {"/文件(_F)/退出",NULL,on_menu_activate,1,"<StockItem>",GTK_STOCK_QUIT},
  14.     {"/编辑(_E)",NULL,NULL,0,"<Branch>"},
  15.     {"/编辑(_E)/复制",NULL,on_menu_activate,2,"<StockItem>",GTK_STOCK_COPY},
  16.     {"/帮助(_H)",NULL,NULL,0,"<Branch>"},
  17.     {"/帮助(_H)/关于",NULL,on_menu_activate,3,"<StockItem>",GTK_STOCK_ABOUT}
  18. };

  19. void on_menu_activate(GtkMenuItem *menu, guint action_data)
  20. {
  21.         printf("Menu %s is pressed.\n", textlist[action_data]);
  22. }

  23. int main ( int argc, char *argv[] )
  24. {
  25.     GtkWidget *window;
  26.     GtkWidget *box;
  27.     GtkWidget *menubar;
  28.     GtkAccelGroup *accel_group;
  29.     GtkItemFactory *item_factory;
  30.     gint items_count = 8;

  31.     gtk_init(&argc, &argv);

  32.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  33.     g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),
  34.             NULL);
  35.     gtk_window_set_title(GTK_WINDOW(window), "添加菜单的快捷方式");

  36.     accel_group = gtk_accel_group_new();
  37.     gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);

  38.     box = gtk_vbox_new(FALSE, 0);
  39.     gtk_container_add(GTK_CONTAINER(window), box);

  40.     item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,"<main>",accel_group);
  41.     gtk_item_factory_create_items(item_factory, items_count, menu_items, NULL);
  42.     menubar = gtk_item_factory_get_widget(item_factory, "<main>");

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

  44.     gtk_widget_show_all(window);

  45.     gtk_main();
  46.     return 0;
  47. }
  48. /* 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