LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 687|回复: 1

请教gtk的菜单快捷方法错误

[复制链接]
发表于 2005-4-29 13:29:16 | 显示全部楼层 |阅读模式
程序如下:
#include <gtk/gtk.h>
void on_menu_activate (GtkMenuItem *item,gpointer data);
static GtkItemFactoryEntry menu_items[]={
{"/文件(_F)",NULL,NULL,0,"<Branch>"},
{"/文件(_F)/新建",NULL,on_menu_activate,"新建","<StockItem>",GTK_STOCK_NEW},
{"/文件(_F)/打开",NULL,on_menu_activate,"打开","<StockItem>",GTK_STOCK_OPEN},
{"/文件(_F)/保存",NULL,on_menu_activate,"保存","<StockItem>",GTK_STOCK_SAVE},
{"/文件(_F)/另存为",NULL,on_menu_activate,"另存为","<StockItem>",GTK_STOCK_SAVE_AS},  
{"/文件(_F)/-",NULL,NULL,0,"<Separator>"},
{"/文件(_F)/退出",NULL,on_menu_activate,"退出","<StockItem>",GTK_STOCK_QUIT},
{"/编辑(_E)",NULL,NULL,0,"<Branch>"},
{"/编辑(_E)/剪切",NULL,on_menu_activate,"剪切","<StockItem>",GTK_STOCK_CUT},
{"/编辑(_E)/复制",NULL,on_menu_activate,"复制","<StockItem>",GTK_STOCK_COPY},
{"/编辑(_E)/粘贴",NULL,on_menu_activate,"粘贴","<StockItem>",GTK_STOCK_PASTE},
{"/编辑(_E)/查找",NULL,on_menu_activate,"查找","<StockItem>",GTK_STOCK_FIND},
{"/帮助(_H)",NULL,NULL,0,"<LastBranch>"},
{"/帮助(_H)/帮助",NULL,on_menu_activate,"帮助","<StockItem>",GTK_STOCK_HELP},
{"/帮助(_H)/关于...",NULL,on_menu_activate,"关于",NULL},
};
void on_menu_activate (GtkMenuItem *item,gpointer data)
{
g_print("菜单%s被激活\n",(gchar*)data);
}
int main (int argc, char *argv[])
{
GtkWidget *window;
GtkWidget *box;
GtkWidget *menubar;
GtkItemFactory *item_factory;
GtkAccelGroup *accel_group;
gint n=15;
gchar *title = "添加菜单的快捷方法";
gtk_init (&argc,&argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW(window),title);
g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);
accel_group = gtk_accel_group_new();
box = gtk_vbox_new(FALSE,0);
gtk_container_add(GTK_CONTAINER(window),box);
gtk_widget_show(box);
item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR,"<main>",accel_group);
gtk_item_factory_create_items(item_factory,n,menu_items,NULL);
gtk_window_add_accel_group(GTK_WINDOW(window),accel_group);
menubar=gtk_item_factory_get_widget(item_factory,"<main>");
gtk_box_pack_start(GTK_BOX(box),menubar,FALSE,FALSE,0);
gtk_widget_show(menubar);
gtk_widget_show(window);
gtk_main();
   return 0;
}
makefile文件内容:
cc = gcc
all:
        $(cc) -o itemfact itemfact.c `pkg-config --cflags --libs gtk+-2.0`
编译结果如下:
$ make
gcc -o itemfact itemfact.c `pkg-config --cflags --libs gtk+-2.0`
itemfact.c:5: warning: initialization makes integer from pointer without a cast
itemfact.c:6: warning: initialization makes integer from pointer without a cast
itemfact.c:7: warning: initialization makes integer from pointer without a cast
itemfact.c:8: warning: initialization makes integer from pointer without a cast
itemfact.c:10: warning: initialization makes integer from pointer without a cast
itemfact.c:12: warning: initialization makes integer from pointer without a cast
itemfact.c:13: warning: initialization makes integer from pointer without a cast
itemfact.c:14: warning: initialization makes integer from pointer without a cast
itemfact.c:15: warning: initialization makes integer from pointer without a cast
itemfact.c:17: warning: initialization makes integer from pointer without a cast
itemfact.c:18: warning: initialization makes integer from pointer without a cast
请问这是什么错误呢?我觉得第二行void on_menu_activate (GtkMenuItem *item,gpointer data);
是多余的,或者后面不应该有分号.不知道谁知道原因?
发表于 2005-5-3 07:18:31 | 显示全部楼层
第二行,的确是可有可无的,只是函数的声明。
只出现的警告,并不影响运行。可能是你其中代码的书写格式有误才会出现。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表