Чтение онлайн

на главную - закладки

Жанры

Linux: Полное руководство

Аллен Питер В.

Шрифт:

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.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);

 gtk_window_set_title(GTK_WINDOW(window),

"Выберите дистрибутив");

 gtk_container_set_border_width(GTK_CONTAINER(window), 0);

 box1 = gtk_vbox_new(FALSE, 0);

 gtk_container_add(GTK_CONTAINER(window), box1);

 gtk_widget_show(box1);

 box2 = gtk_vbox_new(FALSE, 10);

 gtk_container_set_border_width(GTK_CONTAINER (box2), 10);

 gtk_box_pack_start(GTK_BOX(box1), box2, TRUE, TRUE, 0);

 gtk_widget_show(box2);

 button = gtk_radio_button_new_with_label(NULL, "Red Hat");

 gtk_box_pack_start(GTK_BOX(box2), button,

TRUE, TRUE, 0);

Поделиться:
Популярные книги

Полигон

Гостева Ирина
S.T.A.L.K.E.R.
Фантастика:
боевая фантастика
7.78
рейтинг книги
Полигон

Черная метка

Лисина Александра
7. Гибрид
Фантастика:
технофэнтези
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Черная метка

#Бояръ-Аниме. Газлайтер. Том 11

Володин Григорий Григорьевич
11. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 11

На границе империй. Том 7. Часть 3

INDIGO
9. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.40
рейтинг книги
На границе империй. Том 7. Часть 3

Эпоха Опустошителя. Том II

Павлов Вел
2. Вечное Ристалище
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эпоха Опустошителя. Том II

Наследник

Назимов Константин Геннадьевич
3. Травник
Фантастика:
фэнтези
6.80
рейтинг книги
Наследник

Кодекс Охотника

Винокуров Юрий
1. Кодекс Охотника
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
боевая фантастика
5.00
рейтинг книги
Кодекс Охотника

География растений

Гумбольдт Александр
Классики естествознания
Научно-образовательная:
ботаника
7.50
рейтинг книги
География растений

Инкарнатор

Прокофьев Роман Юрьевич
1. Стеллар
Фантастика:
боевая фантастика
рпг
7.30
рейтинг книги
Инкарнатор

Наследие Маозари 2

Панежин Евгений
2. Наследие Маозари
Фантастика:
попаданцы
рпг
аниме
5.00
рейтинг книги
Наследие Маозари 2

Меткий стрелок

Вязовский Алексей
1. Меткий стрелок
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Меткий стрелок

Гримуар темного лорда VI

Грехов Тимофей
6. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда VI

Третий. Том 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
Третий. Том 3

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2