返回首页 - Notes - 2011

GTK+ 快捷创建菜单 GtkItemFactoryEntry


建立顺序

  1. 定义 GtkItemFactoryEntry 结构体类型的一维数组(比如:menu_items[]),每一个数组元素代表一个菜单项,包括根菜单项
  2. 声明一个 GtkItemFactory 对象(比如:item_factory)和一个 GtkWidget 菜单栏对象(比如:menubar
  3. 指定 GtkItemFactoryEntry 一维结构体数组中元素的个数,亦即包括根菜单项在内所有菜单项的个数,具体形式如:
    gint n = 15;
    
  4. 创建一个快捷键集(比如:accel_group),并将其绑定到窗口
  5. 使用 gtk_item_factory_new 函数创建 GtkItemFactory,具体形式如:
    item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accel_group);
    
  6. 使用 gtk_item_factory_create_items 函数创建各菜单项,具体形式如:
    gtk_item_factory_create_items(item_factory, n, menu_items, NULL);
    
  7. 使用 gtk_item_factory_get_widget 函数获取菜单栏的控件指针,并将菜单栏加入高层容器(如 GtkBox),具体形式如:
    menubar = gtk_item_factory_get_widget(item_factory, "<main>");
    
    gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
    
  8. 显示所有组件

GtkItemFactoryEntry结构体的形式

"第1个参数" , 第2个参数 , 第3个参数 , "第4个参数" , "第5个参数" , 第6个参数

共计 6 个参数,部分参数可选

  1. 第1个参数:指定菜单项文字及其位置,并可设置快捷键。根菜单项形式为 "/ 文件 (_F) ",注意,最后的空格一定要有。菜单项形式为 "/ 文件 (_F) /新建",上下两级间的空格不能省略
  2. 第2个参数:设置是否让快捷键生效,不让其生效设为 NULL,没有快捷键也设为 NULL
  3. 第3个参数:指定 activate 信号的回调函数,没有则设为 NULL
  4. 第4个参数:指定传递给回调函数的参数,没有回调函数则设为 0
  5. 第5个参数:设为 "<StockItem>" 则表示使用系统固有资源。设为 "<Branch>" 则表示这是一个根菜单项;设为 "<LastBranch>" 表示这是一个根菜单项,而且位置在菜单栏的最右侧;设为 "<Separator>" 则表示实线水平分隔线;设为 "<Tearoff>" 则表示虚线水平分隔线;不使用系统固有资源则设为 NULL
  6. 第6个参数:只有使用系统固有资源的菜单项需要这个参数,其他包括 根菜单项分隔线普通菜单项 等没有此参数

根菜单项

"/ 文件 (_F) ", NULL, NULL, 0, "<Branch>"


使用系统固有资源的菜单项

"/ 文件 (_F) /新建", NULL, On_Menu_Activate, "新建", "<StockItem>", GTK_STOCK_NEW


不使用系统固有资源的菜单项

"/ 帮助 (_H) /关于", NULL, On_Menu_Activate, "关于", NULL


菜单项分隔线

"/ 姓名 (_N) /-", NULL, NULL, 0, "<Separator>"


date : 2011-08-08