|
|
程序如下:
#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);
是多余的,或者后面不应该有分号.不知道谁知道原因? |
|