分类: 嵌入式
2009-11-26 13:42:12
(6)建立子菜单于父菜单项的联系
5、
名称:: |
gtk_menu_item_set_submenu |
功能: |
建立子菜单和父菜单项的联系 |
头文件: |
#include |
函数原形: |
void gtk_menu_item_set_submenu(GtkMenuItem *menu_item,GtkWidget *submenu); |
参数: |
menu_item 父菜单项 submenu 子菜单 |
返回值: |
无 |
下面是建立菜单的例子:
/*menu2.c*/ #include GtkWidget *CreateMenuItem(GtkWidget *MenuBar,char *test); GtkWidget *CreateMenu(GtkWidget *MenuItem); int main(int argc,char *argv[ ]) { GtkWidget *window;/*定义窗体*/ GtkWidget *MenuBar;/*定义菜单条*/ GtkWidget *box;/*定义组合框*/ GtkWidget *MenuItemFile; gtk_init(&argc,&argv); window=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize(window,400,200);/*设置窗体大小*/ gtk_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL); box=gtk_vbox_new(FALSE,0);/*创建纵向组合框*/ gtk_container_add(GTK_CONTAINER(window),box);/*把组合框加入窗体*/ MenuBar=gtk_menu_bar_new();/*创建菜单条*/ gtk_box_pack_start(GTK_BOX(box),MenuBar,FALSE,TRUE,0);/*把菜单条加入组合框*/ MenuItemFile=CreateMenuItem(MenuBar,”Fiel”);/*调用创建菜单项函数*/ CreateMenu(MenuItemFile);/*调用创建子菜单函数*/ CreateMenuItem(MenuBar,”Edit”); CreateMenuItem(MenuBar,”View”); CreateMenuItem(MenuBar,”Insert”); CreateMenuItem(MenuBar,”Tool”); gtk_widget_show(box); gtk_widget_show(MenuBar); gtk_widget_show(window); gtk_main(); } GtkWidget *CreateMenuItem(GtkWidget *MenuBar,char *test) { GtkWidget *MenuItem; MenuItem=gtk_menu_item_new_with_label(test);/*创建菜单项*/ gtk_menu_shell_append(GTK_MENU_SHELL(MenuBar),MenItem);/*把菜单项加入菜单条,注意我们用gtk_menu_shell_append是为了程序的方便*/ gtk_widget_show(MenuItem); return MenuItem; } GtkWidget *CreateMenu(GtkWidget *MenuItem) { GtkWidget *Menu;/*定义子菜单*/ Menu=gtk_menu_new();/*创建子菜单*/ CreateMenuItem(Menu,”New”);/*调用创建菜单项函数*/ CreateMenuItem(Menu,”Open”); CreateMenuItem(Menu,”Save”); CreateMenuItem(Menu,”Exit”); gtk_menu_item_set_submenu(GTK_MENU_ITEM(MenuItem),Menu);/*把父菜单项于子菜单联系起来*/ gtk_widget_show(Menu); } |
程序运行后出现下面的界面:
到这里我们已经把怎样建立下拉菜单介绍完了。接下来我们菜单的信号处理.
二、菜单的信号处理
菜单项具有表示菜单项被选择的 “activate(激活)”信号。对这个信号建立相应的回调函数,应用程序就能对用户选择的菜单选项作出响应了。
下面的例子对”exit”菜单项进行信号处理,当用户点击”exit”时程序退出。
/*menu3.c*/ #include GtkWidget *CreateMenuItem(GtkWidget *MenuBar,char *test); GtkWidget *CreateMenu(GtkWidget *MenuItem); int main(int argc,char *argv[ ]) { GtkWidget *window;/*定义窗体*/ GtkWidget *MenuBar;/*定义菜单条*/ GtkWidget *box;/*定义组合框*/ GtkWidget *MenuItemFile;/*定义文件子菜单*/ gtk_init(&argc,&argv); window=gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_usize(window,400,200);/*设置窗体大小*/ g_signal_connect(GTK_OBJECT(window),”destroy”,G_CALLBACK(gtk_main_quit),NULL); box=gtk_vbox_new(FALSE,0);/*创建纵向组合框*/ gtk_container_add(GTK_CONTAINER(window),box);/*把组合框加入窗体*/ MenuBar=gtk_menu_bar_new();/*创建菜单条*/ gtk_box_pack_start(GTK_BOX(box),MenuBar,FALSE,TRUE,0);/*把菜单条加入组合框*/ MenuItemFile=CreateMenuItem(MenuBar,”Fiel”);/*调用创建菜单项函数*/ CreateMenu(MenuItemFile);/*调用创建子菜单函数*/ CreateMenuItem(MenuBar,”Edit”); CreateMenuItem(MenuBar,”View”); CreateMenuItem(MenuBar,”Insert”); CreateMenuItem(MenuBar,”Tool”); gtk_widget_show(box); gtk_widget_show(MenuBar); gtk_widget_show(window); gtk_main(); } GtkWidget *CreateMenuItem(GtkWidget *MenuBar,char *test) { GtkWidget *MenuItem; MenuItem=gtk_menu_item_new_with_label(test);/*创建菜单项*/ gtk_menu_shell_append(GTK_MENU_SHELL(MenuBar),MenItem);/*把菜单项加入菜单条,注意我们用gtk_menu_shell_append是为了程序的方便*/ gtk_widget_show(MenuItem); return MenuItem; } GtkWidget *CreateMenu(GtkWidget *MenuItem) { GtkWidget *Menu;/*定义子菜单*/ GtkWidget *Exit;/*定义exit子菜单项*/ Menu=gtk_menu_new();/*创建子菜单*/ CreateMenuItem(Menu,”New”);/*调用创建菜单项函数*/ CreateMenuItem(Menu,”Open”); CreateMenuItem(Menu,”Save”); Exit=CreateMenuItem(Menu,”Exit”); g_signal_connect(GTK_OBJECT(Exit),”activate”,G_CALLBACK(gtk_menu_quit)mNULL); gtk_menu_item_set_submenu(GTK_MENU_ITEM(MenuItem),Menu);/*把父菜单项于子菜单联系起来*/ gtk_widget_show(Menu); } |