Chinaunix首页 | 论坛 | 博客
  • 博客访问: 569051
  • 博文数量: 97
  • 博客积分: 5090
  • 博客等级: 大校
  • 技术积分: 969
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-01 14:56
文章分类

全部博文(97)

文章存档

2011年(1)

2009年(1)

2008年(14)

2007年(37)

2006年(44)

我的朋友

分类: LINUX

2006-03-08 13:26:03

    前几天在网上搜索用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`
 
____________________________________________________
 
阅读(2219) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~