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.h>
Обычно файлы заголовков 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 <gtk/gtk.h>
#include <glib.h>
gint close_application( GtkWidget *widget,
GdkEvent * event, gpointer data) {
gtk_main_quit();
return(FALSE);
}
int main(int argc, char *argv[]) {
GtkWidget *window = NULL;
GtkWidget *box1;
GtkWidget *box2;
GtkWidget *button;
GtkWidget *separator;
GSList *group;
gtk_init(&argc,&argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window), 'delete_event',
GTK_SIGNAL_FUNC(close_application), NULL);