使用套件示例@GTK+ 2.0 中文教程连载 现在我们已经介绍了难的办法,这里介绍怎样用 gtk_item_factory 调用来做。
2010-12-21 15:52
701 查看
套件示例
这里是一个使用 GTK 套件的示例。#include <gtk/gtk.h> #include <strings.h> /* 必须的基本回调 */ static void print_hello( GtkWidget *w, gpointer data ) { g_message ("Hello, World!/n"); } /* 这是用来生成新菜单的 GtkItemFactoryEntry 结构。 第一项:菜单路径。下划线后的字母指出菜单打开时 的快捷键。 第二项:这个条目的快捷键 第三项:回调函数。 第四项:回调动作。这个改变被调用的函数的参数。默认是0. 第五项:项类型,用来定义它是哪种项, 这里是可能的值: NULL -> "<Item>" "" -> "<Item>" "<Title>" -> 创建一个标题(title)项 "<Item>" -> 创建一个简单(simple)项 "<CheckItem>" -> 创建一个检查(check)项 "<ToggleItem>" -> 创建一个开关(toggle)项 "<RadioItem>" -> 创建一个选择(radio)项 <path> -> 选择项连接到的路径 "<Separator>" -> 创建一个分隔线(separator) "<Branch>" -> 创建一个包含子项的项(可选) "<LastBranch>" -> 创建一个右对齐的分枝(branch) */ static GtkItemFactoryEntry menu_items[] = { { "/_File", NULL, NULL, 0, "<Branch>" }, { "/File/_New", "<control>N", print_hello, 0, NULL }, { "/File/_Open", "<control>O", print_hello, 0, NULL }, { "/File/_Save", "<control>S", print_hello, 0, NULL }, { "/File/Save _As", NULL, NULL, 0, NULL }, { "/File/sep1", NULL, NULL, 0, "<Separator>" }, { "/File/Quit", "<control>Q", gtk_main_quit, 0, NULL }, { "/_Options", NULL, NULL, 0, "<Branch>" }, { "/Options/Test", NULL, NULL, 0, NULL }, { "/_Help", NULL, NULL, 0, "<LastBranch>" }, { "/_Help/About", NULL, NULL, 0, NULL }, }; void get_main_menu( GtkWidget *window, GtkWidget **menubar ) { GtkItemFactory *item_factory; GtkAccelGroup *accel_group; gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); accel_group = gtk_accel_group_new (); /* 这个函数初始化套件。 参数1:菜单类型 - 可以是GTK_TYPE_MENU_BAR, GTK_TYPE_MENU, 或GTK_TYPE_OPTION_MENU。 参数2:菜单路径。 参数3:指向一个gtk_accel_group的指针。套件在生成菜单时设置 好加速表(accelerator table)。 */ item_factory = gtk_item_factory_new (GTK_TYPE_MENU_BAR, "<main>", accel_group); /* 这个函数生成菜单项。把数组里项的数量,数组自身,和菜单项的任 意回调数据依次传递给套件。 */ gtk_item_factory_create_items (item_factory, nmenu_items, menu_items, NULL); /* 把新的加速组绑定到窗口。 */ gtk_window_add_accel_group (GTK_WINDOW (window), accel_group); if (menubar) /* 最后,返回套件已经创建的菜单栏。 */ *menubar = gtk_item_factory_get_widget (item_factory, "<main>"); } int main( int argc, char *argv[] ) { GtkWidget *window; GtkWidget *main_vbox; GtkWidget *menubar; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL); gtk_window_set_title (GTK_WINDOW (window), "Item Factory"); gtk_widget_set_size_request (GTK_WIDGET (window), 300, 200); main_vbox = gtk_vbox_new (FALSE, 1); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 1); gtk_container_add (GTK_CONTAINER (window), main_vbox); gtk_widget_show (main_vbox); get_main_menu (window, &menubar); gtk_box_pack_start (GTK_BOX (main_vbox), menubar, FALSE, TRUE, 0); gtk_widget_show (menubar); gtk_widget_show (window); gtk_main (); return 0; } |
<<< Previous | Home | Next >>> |
使用套件 | Up | 无文档构件 |
相关文章推荐
- 示例程序代码GtkDial@GTK+ 2.0 中文教程连载
- 轻松使用调整对象@GTK+ 2.0 中文教程连载
- rc 文件示例@GTK+ 2.0 中文教程连载
- GTK 信号@GTK+ 2.0 中文教程连载
- 示例程序代码Tictactoe@GTK+ 2.0 中文教程连载
- 示例程序代码Scribble@GTK+ 2.0 中文教程连载
- 表组装示例@GTK+ 2.0 中文教程连载
- 编写 GTK 应用程序的技巧 @GTK+ 2.0 中文教程连载
- GTK 的 rc 文件/rc 文件的功能@GTK+ 2.0 中文教程连载
- 手工菜单示例@GTK+ 2.0 中文教程连载
- 进度条 Progress Bars@GTK+ 2.0 中文教程连载(原文编译时73行有误:default:后应加 ;号做空语句)
- 教程的版权和许可声明@GTK+ 2.0 中文教程连载
- GTK+ 2.0 中文教程连载
- 编译 Hello World 程序@GTK+ 2.0 中文教程连载
- 构件概述@GTK+ 2.0 中文教程连载
- “调整对象”的内部机制@GTK+ 2.0 中文教程连载
- GLib@GTK+ 2.0 中文教程连载
- 编写你自己的构件 概述@GTK+ 2.0 中文教程连载
- Hello World 详解@GTK+ 2.0 中文教程连载
- 构件的组织@GTK+ 2.0 中文教程连载