文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>GUI开发-用GTK创建复选菜单项

GUI开发-用GTK创建复选菜单项

时间:2006-03-08  来源:luojiafeng1984

/* 下面程序编译运行后,有一个View菜单,一个“TOOl Bar”复选菜单项,一个“Float Tool Bar”复选菜单项,菜单项为选中状态时显示相应的工具栏 。注释写的不好,这的确是个大问题,我会不断改进的,希望各位网友多提一些改进程序时空效率的方法,谢谢了。*/   #include <gtk/gtk.h>    /*是否显示标准工具栏 */ 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`  
相关阅读 更多 +
排行榜 更多 +
试着飞手游下载

试着飞手游下载

休闲益智 下载
血染小镇(功能菜单)中文版下载

血染小镇(功能菜单)中文版下载

飞行射击 下载
泰坦之旅高爆版下载

泰坦之旅高爆版下载

角色扮演 下载