菜单构件
套件要容易使用得多,加新的菜单也方便些,虽然用手工方法写一些封装(wrapper)函数来创建菜单能对可用性大有帮助。使用套件,不能在菜单上增加图片或 '/' 字符。
手工创建菜单
菜单项构件有两个不同的用处,这情况有一点复杂。既有组装到菜单里的构件,也有组装到菜单栏中,当被选中时激活菜单的构件。
让我们看一下用来创建菜单和菜单栏的函数。第一个函数用来创建一个新的菜单栏。
GtkWidget *gtk_menu_bar_new( void ); |
这个相当自我解释的函数创建一个新的菜单栏。你用 gtk_container_add() 组装它到一个窗口,或盒组装(box_pack)函数来将它组装到一个盒子中 - 就像按钮一样。
GtkWidget *gtk_menu_new( void ); |
这个函数返回指向一个新菜单的指针。它从不会真正显示(用 gtk_widget_show()),它只是一个菜单项的容器。我希望你看了后面的示例后会弄清楚一些。
接下来的三个调用用来创建被组装到菜单(和菜单栏)中的菜单项。
GtkWidget *gtk_menu_item_new( void ); |
file_menu = gtk_menu_new (); /* 不必显示菜单 */ |
这时我们有了我们的菜单。现在我们要创建一个菜单栏,并为File 条目(entry)创建一个菜单项,我们的菜单就加在这个上。代码看起来像这样:
menu_bar = gtk_menu_bar_new (); |
现在我们要把菜单和file_item 关联起来。用这个函数可以做到:
void gtk_menu_item_set_submenu( GtkMenuItem *menu_item, |
gtk_menu_item_set_submenu (GTK_MENU_ITEM (file_item), file_menu); |
void gtk_menu_bar_append( GtkMenuBar *menu_bar, |
gtk_menu_bar_append (GTK_MENU_BAR (menu_bar), file_item); |
如果我们想让菜单在菜单栏上右对齐,例如帮助菜单就经常是这样,我们可以在绑定它到菜单栏之前使用下面的函数(本例中又是对file_item 使用)。
void gtk_menu_item_right_justify( GtkMenuItem *menu_item ); |
-
多次调用 gtk_menu_item_new() 创建每个你想在你的菜单上出现的菜单项。并使用 gtk_menu_append() 将每个新的菜单项放到菜单上。
-
用 gtk_menu_item_new() 创建一个菜单项。这将是菜单的根(root),上面显示的文本将自己出现在菜单栏上。
创建一个弹出菜单几乎也一样。不同的是菜单不会被菜单栏“自动”弹出,而是在button-press事件(例如)里调用函数 gtk_menu_popup() 时明确地弹出。有这些步骤:
-
static gint handler (GtkWidget *widget,
GdkEvent *event); -
在事件处理函数里,如果这是一个鼠标按钮按下事件,把event 当作鼠标按键事件(本来就是)并像示例代码那样利用它传递信息给gtk_menu_popup()。
-
g_signal_connect_swapped (G_OBJECT (widget), "event",
G_CALLBACK (handler),
G_OBJECT (menu));其中widget 是你要绑定到的构件,handler 是处理函数,而menu 是一个用 gtk_menu_new() 创建的菜单。它可以是一个也被菜单栏弹出的菜单,示例代码里就做了示范。
<<< Previous | Home | Next >>> |
笔记本 Notebooks | 手工菜单示例 |