前几天在网上搜索用GTK+创建单选菜单项和复选菜单项的简单程序,始终没有找到,翻GTK+参考手册,关于单选菜单项和复选菜单项的还是无文档构件,根据参考手册,做了一个简单的例子,希望对GTK进行GUI开发的初学者有所帮助!
#include
/*********************************************
下面的数组里面的每一行代表一个菜单项,这个数组是创建菜单项的关键。
比如说{"/_File", NULL, NULL, 0, ""}代表文件主菜单项,其中第一个参数“/_File”代表菜单项的名称,第二个参数是快捷键,这里定义为NULL,第三个参数是菜单激活时的回调函数,第四个参数是传递给回调函数的参数,默认为0,第五个参数是菜单的类型,若第五个参数为"",表明该菜单项还有下一级菜单,如果第五个参数为"",表明该菜单项是复选菜单项,如果第五个参数是"",表明该菜单项是单选菜单项。
*********************************************/
static GtkItemFactoryEntry menu_items[] = {
{"/_File", NULL, NULL, 0, ""},
{"/File/_New", "N", NULL, 0, NULL},
{"/_Edit", NULL, NULL, 0, ""},
{"/Edit/_Cut", "X", NULL, 0, NULL}
};
/*********************************************
下面的函数是创建菜单栏,第一个参数是菜单栏所在的窗口,第二个参数是菜单栏指针,大家都知道,要通过函数改变变量的值,必须把那个变量的地址传过来,(指针和变量的区别大家都应该知道吧)而下面要改变的就是一个指针,所以第二个参数定义为指向指针的指针。这个函数被调用后,第二个参数所指向的就是创建好的菜单栏。
**********************************************/
static void get_main_menu (GtkWidget *window, GtkWidget **menubar)
{
GtkItemFactory *item_factory;
GtkAccelGroup *accel_group;
/* 菜单项的数量 */
gint n = sizeof(menu_items) / sizeof(menu_items[0]);
/* 创建快捷键组 */
accel_group = gtk_accel_group_new();
item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "", accel_group);
/* 创建菜单项,利用了前面定义的菜单项数组作为参数*/
gtk_item_factory_create_items(item_factory, n, menu_items, NULL);
if (menubar) /* 如果不是空指针 */
*menubar = gtk_item_factory_get_widget(item_factory, "");
}
int main(int argc, char* argv[])
{
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *menubar;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
vbox = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), vbox);
get_main_menu(window, &menubar);
gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0);
gtk_widget_show_all(window);
gtk_main();
return FALSE;
}
编写Makefile如下:
CC = gcc
all:
[TAB键] $(CC) -o menu menu.c `pkg-config --cflags --libs gtk+-2.0`
____________________________________________________
阅读(2231) | 评论(0) | 转发(0) |