Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Профессиональное программирование


Информационный Канал Subscribe.Ru

В начало Клуб программистов Весельчак У Связаться со мной
a
С новой неделей вас всех, здравствуйте.

Продолжение серии по GTK+.

Основы GTK+ (часть 2)
Автор: LogRus

В первой части мы учились ловить события и создавать виджеты.
В этой части мы посмотрим, как создать меню и создадим небольшой текстовый редактор.
Приступим. Для создания меню нам в большинстве случаем понадобятся следующие функции:

GtkWidget *gtk_menu_bar_new( void );
GtkWidget *gtk_menu_new( void );
GtkWidget *gtk_menu_item_new( void );

GtkWidget *gtk_menu_item_new_with_label( const char *label );

GtkWidget *gtk_menu_item_new_with_mnemnonic( const char *label );
void gtk_menu_item_set_submenu( GtkMenuItem *menu_item,
GtkWidget *submenu );
void gtk_menu_bar_append( GtkMenuBar *menu_bar,
GtkWidget *menu_item );
void gtk_menu_item_right_justify( GtkMenuItem *menu_item );

Расскажу о них по порядку.

GtkWidget *gtk_menu_bar_new( void );

Создает меню бар куда собственно и крепится наше меню.

GtkWidget *gtk_menu_new( void );

Создает меню в которое инкапсулируются остальные элементы меню.

GtkWidget *gtk_menu_item_new( void );

GtkWidget *gtk_menu_item_new_with_label( const char *label );

GtkWidget *gtk_menu_item_new_with_mnemnonic( const char *label );

Создают элементы меню. С первой функцией всё понятно просто элемент без видимой метки. Вторая с видимой меткой, а треть я подчеркиванием мнемоники.
Пока ничего сложного и интересного.

void gtk_menu_item_set_submenu( GtkMenuItem *menu_item,
GtkWidget *submenu );

Привязываем к элементу меню подменю.

void gtk_menu_bar_append( GtkMenuBar *menu_bar,
GtkWidget *menu_item );

Далее крепим элемент меню к меню бару.

void gtk_menu_item_right_justify( GtkMenuItem *menu_item );

Если очень хочется можно элемент меню выровнять в меню баре по правому краю.
При нажатии на элемент меню вызывается событие activate .
Для создания сложных меню с минимальным вызовом функций существует фабрика элементов, но об этом в другой раз.
Пример кода из нашей программы:

/* Меню бар. */
menu_bar = gtk_menu_bar_new ();

/* Пакуем меню бар в коробку. И показываем его всем. */
gtk_box_pack_start (GTK_BOX (ver_box), menu_bar, FALSE, TRUE, 0);
gtk_widget_show (menu_bar);

/* Собственно меню "Файл". */
file_menu = gtk_menu_new();

/* Создаем элементы меню "Файл". */
open_item = gtk_menu_item_new_with_label ("Open");
save_item = gtk_menu_item_new_with_label ("Save");
save_as_item = gtk_menu_item_new_with_label ("Save as");
quit_item = gtk_menu_item_new_with_label ("Quit");

/* Пакуем элементы меню "Файл" в меню "Файл". */
gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), open_item);
gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), save_item);
gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), save_as_item);
gtk_menu_shell_append (GTK_MENU_SHELL (file_menu), quit_item);

/* Подключаем к ним события. */
g_signal_connect (G_OBJECT (open_item), "activate", G_CALLBACK (open_event), NULL);
g_signal_connect (G_OBJECT (save_item), "activate", G_CALLBACK (save_event), NULL);
g_signal_connect (G_OBJECT (save_as_item), "activate", G_CALLBACK (save_event), (gpointer) "as");
g_signal_connect_swapped (G_OBJECT (quit_item), "activate", G_CALLBACK (gtk_main_quit),
G_OBJECT(window));
/* Показываем элементы меню "Файл". */
gtk_widget_show(open_item);
gtk_widget_show(save_item);
gtk_widget_show(save_as_item);
gtk_widget_show(quit_item);

/* Создаем верхний элемент меню "Файл". */
file_item = gtk_menu_item_new_with_label ("File");
gtk_widget_show (file_item);

/* Подключаем к верхниму элементу меню. А его в меню бару. */
gtk_menu_item_set_submenu (GTK_MENU_ITEM (file_item), file_menu);
gtk_menu_bar_append (GTK_MENU_BAR(menu_bar), file_item);
Полностью с иллюстрациями статья здесь: http://club.shelek.com/viewart.php?id=124.


Удачи вам.
С уважением, Гром.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное