typedef gint (*GCompareFunc) (gconstpointer a, gconstpointer b); Данную функцию вы должны написать самостоятельно. Она должна принимать два параметра и возвращать целое значение:
♦ если a
♦ если a==b, то 0;
♦ если a>b, то 1 (любое число больше 0).
Библиотека Glib также содержит средства для работы с деревьями — как бинарными, так и произвольными, но мы эти средства рассматривать не будем.
Библиотека Glib позволяет использовать таймеры в наших программах.
Для этого нужно:
♦ подключить заголовочный файл gtimer.h;
♦ создать таймер функцией GTimer *g_timer_new();
♦ запустить таймер функцией g_timer_start(GTimer *timer);
♦ узнать время, отсчитанное таймером — g_timer_elapsed();
♦ при необходимости перезапустить таймер с помощью функции g_timer_reset(GTimer *timer);
♦ остановить таймер функцией g_timer_stop(GTimer * timer);
♦ уничтожить таймер — g_timer_destroy(GTimer *timer).
Стоит остановиться подробнее лишь на функции g_timer_elapsed(GTimer *timer, gulong *mcs). Данная функция возвращает число секунд, отсчитанное таймером. По адресу указателя *mcs записывается число микросекунд.
Пример использования таймера представлен в листинге 23.1.
Листинг 23.1. Использование таймера
#include
#include
#include
int main() {
double sec;
gulong ms;
int i;
GTimer *timer = g_timer_new();
printf("Данный цикл будет работать не более 10 секунд\n");
g_timer_start(timer);
for (i=1; i>0;) {
sec = g_timer_elapsed(timer,&ms);
if (sec >=10) {
g_timer_stop(timer);
printf("Таймер остановлен. Мкс: %d\n",ms);
break;
}
}
g_timer_destroy(timer);
return 0;
}
Перед написанием самой простой GTK-программы нужно разобраться с терминологией GTK. Элементы графического интерфейса пользователя — окна, кнопки, поля ввода, переключатели и тому подобное — называются виджитами.
Основным элементом графического интерфейса является окно. Виджиты для размещения в окне помещаются в контейнер. В самом окне выравнивать виджиты можно с помощью вертикальных/горизонтальных боксов или же таблиц. Второй способ более гибок, хотя он может показаться вам сложнее.
Виджиты могут реагировать на сигналы, например, щелчок мышью. При этом вызывается функция-обработчик события (сигнала), если вы определили ее.
Работа с виджитами происходит по такой схеме:
1. создание виджита с помощью одной из функций библиотеки GTK;
2. определение свойств виджита;
3. определение сигналов виджита, если он должен реагировать на сигналы;
4. размещение виджита в контейнере, то есть привязка его к окну;
5. отображение виджита.
Нужно обязательно отобразить виджит, иначе его никто не увидит. Например, следующий фрагмент кода создает виджит — кнопку с текстом — и отображает ее.
GtkWidget *button;
...
/* Рисуем кнопочку с надписью Hello, All */
button = gtk_button_new_with_label("Hello, All");
/* При нажатии кнопки будет вызвана функция hello() */
gtk_signal_connect(GTK_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC(hello), NULL);
/* Помещаем кнопку в контейнер */
gtk_container_add(GTK_CONTAINER(window), button);
/* Отображаем кнопку. */
gtk_widget_show(button);
Первый оператор создает кнопку (button), второй — добавляет кнопку в контейнер. В данном случае контейнером является наше окно. Виджит window должен быть создан раньше: нельзя создать кнопку без окна. Точнее, можно, но тогда она не будет привязана к какому-либо окну и мы ее не увидим. Функция gtk_widget_show() отображает нашу кнопку. Не забудьте отобразить и само окно. Порядок отображения виджитов особой роли не играет, но рекомендуется главное окно отображать в последнюю очередь.
Сейчас мы напишем программу, которая будет формировать небольшое графическое окошко. Начнем сразу с исходного кода — так будет проще понять, что есть что.
Листинг 23.2. Простое окно (файл first.с)
#include
int main(int argc, char *argv[]) {
GtkWidget *window1;
gtk_init(&argc, &argv);
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии