四、GTK 学习菜单

 
   研究了半天的菜单(特指主菜单),总算有些眉目了!
    菜单的创建过程:
    在Gtk中,菜单首先要有一个菜单条MenuBar,使用函数gtk_menu_bar_new()创建;
    其次,需要在上面放一个菜单项,这个菜单项就是 最顶上的菜单,比如浏览器上的文件菜单,这个可以使用gtk_menu_item_new_with_label或 gtk_menu_item_new_with_mnemonic函数来创建,对于顶级菜单我建议使用后面这个函数创建,因为这个函数创建出来的菜单可以 带上一个快捷键,这个快捷键是软件的基本功能,例如“文件(F)”,我们按ALT+F键即可激活菜单;先在来看看怎么生成这样的菜单吧(我可是找了一个小时的时间才搞定的哦):
    gtk_menu_item_new_with_mnemonic("文件(_F)");
这里还有一个小提示,看本文最后,别忘了还要把菜单项加入到菜单条中,使用gtk_menu_bar_append(GTK_MENU_BAR(菜单条), 菜单项)函数;
    第三,创建菜单,使用gtk_menu_new()函数,注意:此对象不需要show,即不需要调用gtk_widget_show()函数来显示这个对象;
    第四,创建下面的菜单项,可以使用gtk_menu_item_new_with_label或 gtk_menu_item_new_with_mnemonic函数,效果上面已经说过了;,然后把菜单项加入到第三步创建的菜单中,使用函数 gtk_menu_append(GTK_MENU(菜单), 菜单项);
    第五,现在我们把第三步创建的菜单与顶级菜单关联起来gtk_menu_item_set_submenu(GTK_MENU_ITEM(顶级菜单), 菜单);
    最后,把菜单条加入到窗口中gtk_container_add(GTK_CONTAINER(窗口), 菜单条);
    很难看?自己想办法怎么布局吧,我使用BOX的;
   
    下面再说一下快捷键:
    GtkAccelGroup *accel_group;
    accel_group = gtk_accel_group_new();
    gtk_widget_add_accelerator(菜单项,
                               "activate",  //信号
                               accel_group, 
                               GDK_Q,   // Q键
                             (GdkModifierType) GDK_CONTROL_MASK,
                              GTK_ACCEL_VISIBLE);
    gtk_window_add_accel_group(GTK_WINDOW(win), accel_group);   
    记得#include <gdk/gdkkeysyms.h>。


    附加内容:
    关于 gtk_menu_item_new_with_mnemonic("文件(_F)") 这一句,用Glade生成的代码都定义了下面的宏
#ifdef ENABLE_NLS
include <libintl.h>
undef _
define _(String) dgettext (PACKAGE, String)
#else
define _(String) (String)
#endif
然后调用时,
gtk_menu_item_new_with_mnemonic(_("文件(_F)"));
做了一个实验,有没有他编译都不出错,也不知道这个宏是干什么用的,有牛人看到要给指点一二啊!
posted on 2008-08-11 08:55  dotjava  阅读(446)  评论(0编辑  收藏  举报