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

全部博文(97)

文章存档

2011年(1)

2009年(1)

2008年(14)

2007年(37)

2006年(44)

我的朋友

分类: LINUX

2006-03-08 12:29:54

/* 下面程序编译运行后,有一个View菜单,一个“TOOl Bar”复选菜单项,一个“Float Tool Bar”复选菜单项,菜单项为选中状态时显示相应的工具栏 。注释写的不好,这的确是个大问题,我会不断改进的,希望各位网友多提一些改进程序时空效率的方法,谢谢了。*/
 
#include
 
 /*是否显示标准工具栏 */
gboolean isshowstdtoolbar = FALSE ;
 
/* 是否显示浮动工具条 */
gboolean isshowfloattoolbar = FALSE ;
 
static GtkWidget *std_toolbar;  
static GtkWidget *float_toolbar;
static GtkWidget *main_vbox;
 
/* View 菜单中的Toolbar 菜单项被激活时的回调函数 */
static void on_view_toolbar_active ( GtkMenuItem *menuitem, gpointer data );
 
/* view 菜单中的Float ToolBar菜单项激活时的回调函数 */
static void on_view_floattoolbar_active
    ( GtkMenuItem *menuitem, gpointer data);
 
/* 创建浮动工具条的函数 */
static GtkWidget* create_float_toolbar ( void );
 
/* 创建标准工具栏的函数 */
static GtkWidget* create_std_toolbar ( void );
 
/* 创建菜单栏的函数 */
static GtkWidget* create_menubar ( GtkAccelGroup *accel_group, GtkWidget *window );
 
/* 创建应用程序主窗口的程序 */
static GtkWidget* create_main_window ( void );
 
 
void on_view_stdtoolbar_active ( GtkMenuItem *menuitem, gpointer data )
{
    isshowstdtoolbar = !isshowstdtoolbar;
    if (isshowstdtoolbar) {
        stdtoolbar = create_std_toolbar();
        gtk_box_pack_start( GTK_BOX(main_vbox), stdtoolbar, FALSE, FALSE, 0 );
        gtk_widget_show(stdtoolbar);
    }
    else {
        gtk_widget_destroy(stdtoolbar);
    }
}
 
void on_view_floattoolbar_active ( GtkMenuItem *menuitem, gpointer data)
{
/* 菜单项激活后改变浮动工具栏显示状态 */
    isshowfloattoolbar = !isshowfloattoolbar;
 
/* 显示浮动工具栏条件为真,则创建浮动工具栏并显示 */
    if (isshowfloattoolbar) {
        floattoolbar = create_float_toolbar();
        gtk_box_pack_start( GTK_BOX(main_vbox), floattoolbar, FALSE, FALSE, 0 );
        gtk_widget_show(floattoolbar);
    }
 
/* 为假,则销毁浮动工具栏 */
    else {
        gtk_widget_destroy(floattoolbar);
    }
}
 
GtkWidget* create_float_toolbar ( void )
{
    GtkWidget *handle;
    GtkWidget *hbox;
    GtkWidget *button;
    GtkTooltips *handle_button_tips;
 
    /* 创建一个浮动的工具条 */
    handle = gtk_handle_box_new();
 
    hbox = gtk_hbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(handle), hbox);
 
    handle_button_tips = gtk_tooltips_new();
 
    button = gtk_button_new_from_stock(GTK_STOCK_NEW);
    gtk_tooltips_set_tip(GTK_TOOLTIPS(handle_button_tips), button, "新建一个文件", "New");
 
    gtk_widget_show_all(handle);
    return handle;
}
 
 
GtkWidget* create_menubar (GtkAccelGroup *accel_group, GtkWidget *window )
{
    GtkWidget *menubar;
    GtkWidget *rootmenu;  
    GtkWidget *viewmenu;
    GtkWidget *toolbar_menuitem;
    GtkWidget *floattoolbar_menuitem;
 
    menubar = gtk_menu_bar_new();
    rootmenu = gtk_menu_item_new_with_mnemonic ("_View");
 
    /* 视图菜单 */
    viewmenu = gtk_menu_new();
    toolbar_menuitem = gtk_check_menu_item_new_with_label("Tool Bar");
    gtk_menu_shell_append(GTK_MENU_SHELL(viewmenu), toolbar_menuitem);
    g_signal_connect(G_OBJECT(toolbar_menuitem), "activate", G_CALLBACK(on_view_stdtoolbar_active), NULL);
 
     floattoolbar_menuitem = gtk_check_menu_item_new_with_label("Float Tool Bar");
     gtk_menu_shell_append(GTK_MENU_SHELL(viewmenu), floattoolbar_menuitem);
    g_signal_connect(G_OBJECT(floattoolbar_menuitem), "activate", G_CALLBACK(on_view_floattoolbar_active), NULL);
 
    gtk_menu_item_set_submenu(GTK_MENU_ITEM(rootmenu), viewmenu);
    gtk_menu_shell_append(GTK_MENU_SHELL(menubar), rootmenu);
   
    gtk_widget_show_all(menubar);
    return menubar;
}
 
GtkWidget* create_std_toolbar ( void )
{
    GtkWidget *toolbar;
    gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), GTK_STOCK_NEW, "退出", "退出", GTK_SIGNAL_FUNC(gtk_main_quit), NULL, -1);
    gtk_widget_show_all(toolbar);
    return toolbar;
}
 
GtkWidget* create_main_window ( void )
{
    GtkWidget *window;
    GtkAccelGroup *accel_group;
    GtkWidget *menubar;
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    accel_group = gtk_accel_group_new();
    gtk_window_set_default_size(GTK_WINDOW(window), 800, 600);
    gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
    g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
   
    main_vbox = gtk_vbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(window), main_box);
   
    menubar = create_menubar(accel_group, window);
    gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, FALSE, 0);
 
    gtk_widget_show_all(window);
    return window;
}
 
int main (int argc, char* argv[])
{
    GtkWidget *main_window;
   
    gtk_init(&argc, &argv);
    main_window = create_main_window();
    gtk_widget_show_all(main_window);
    gtk_main();
    return FALSE;
}
 
 
__________________________________________________________
编写Makefile文件如下:
CC = gcc
all:
[tab 键] $(CC) -o checkmenuitem checkmenuitem.c `pkg-config --cflags --libs gtk+-2.0`
 
阅读(1536) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~