GTK_SIGNAL_FUNC(writetofile), NULL);
gtk_widget_show(button);
/* То же самое для кнопки Quit */
button = gtk_button_new_with_label("Quit");
gtk_table_attach_defaults(GTK_TABLE(table),
button, 2, 3, 2, 3);
gtk_signal_connect(GTK_OBJECT(button),"clicked",
GTK_SIGNAL_FUNC(delete_event), NULL);
gtk_widget_show(button);
gtk_widget_show(table); /* Показываем таблицу */
gtk_widget_show(window); /* Показываем окно */
/* Запускаем GTK-программу */
gtk_main();
return 0;
}
Я старался писать подробные комментарии, но все же кое-что осталось в тумане. Это координаты ячеек. Рассмотрим нашу таблицу 3×3:
table = gtk_table_new(3, 3, TRUE);
0 1 2 3
Domain Поле OK
1
DNS1 Поле
2
DNS2 Поле Quit
3
Сначала указываются координаты по X, затем — по Y. Вот координаты кнопки OK: 2, 3, 0, 1. Это означает, что кнопка будет расположена в последнем столбце (между 2 и 3), но в первой строке (между 0 и 1).
gtk_table_attach_defaults(GTK_TABLE(table), button,
2, 3, 0, 1);
Подробнее рассматривать контейнер GtkTable я не вижу смысла: основные операции, я думаю, вам понятны — это создание таблицы с указанием ее размерности и добавление в таблицу виджита функцией gtk_table_attach_defaults(). Еще раз напомню о необходимости отображения виджитов, помещенных в таблицу, и самой таблицы:
gtk_widget_show (table);
Теперь откомпилируем нашу программу:
$ gcc resolv.с -о resolv `gtk-config --cflags` `gtk-config --libs`
Программа gtk-config сообщает компилятору всю необходимую информацию о библиотеке GTK.
Обратите внимание на директиву
#include
Обычно файлы заголовков GTK находятся в другом каталоге, например, gtk-1.2, но это не имеет значения — все необходимые параметры укажет программа gtk-config.
В заключение этого пункта перечислим события, характерные для кнопок (таблица 23.3).
События кнопок Таблица 23.3
Событие | Описание |
---|---|
clicked | Щелчок |
pressed | Кнопка нажата мышью (и пока не отпущена) |
released | Кнопка отпущена |
enter | Указатель мыши в пределах кнопки |
leave | Указатель мыши вышел за пределы кнопки |
23.4.3. Переключатели
Переключатели бывают двух типов: зависимые (radio buttons) и независимые (checkbuttons). Переключатели являются кнопками, поэтому для них характерны те же события, что и для кнопок.
Начнем с независимых переключателей, так как они проще в реализации. Создать такой переключатель можно с помощью одной из функций:
GtkWidget *gtk_check_button_new(void);
GtkWidget *gtk_check_button_new_with_label(gchar * label);
Первая создает переключатель без надписи (если вы хотите указать надпись отдельно), а вторая — с надписью, которая обычно отображается справа от переключателя. Затем нужно, как всегда, поместить виджиты в контейнер и отобразить.
Зависимые переключатели можно создать тоже с помощью двух аналогичных функций:
GtkWidget *gtk_radio_button_new(GSList *group);
GtkWidget *gtk_radio_button_new_with_label(GSList *group,
gchar *label);
Параметр group указывает на принадлежность переключателя к группе. В пределах группы активным может быть только один переключатель. Группу можно создать функцией:
GSList *gtk_radio_button_group(
GtkRadioButton *radio_button);
Однако существует другой способ, позволяющий обойтись без переменной группы — так мы сэкономим память, если групп много:
button2 = gtk_radio_button_new_with_label(
gtk_radio_button_group(GTK_RADIO_BUTTON(button1)),
"button2");
С помощью функции
void gtk_toggle_button_set_active(
GtkToggleButton *toggle_button, gint state);
можно сделать одну из кнопок активной.
Следующий листинг демонстрирует работу с тремя зависимыми переключателями и вертикальным контейнером GtkVBox.
Листинг 23.7. Зависимые переключатели
#include
#include
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии