window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window1), "Заголовок");
gtk_widget_show(window1);
gtk_main();
return 0;
}
Сначала мы подключаем заголовочный файл gtk/gtk.h
— это необходимое условие для того, чтобы начать работу с библиотекой GTK. В первой строке программы мы объявляем наш основной (и единственный в этой программе) виджит — виджит основного окна:
GtkWidget *window1;
Обратите внимание, что виджит объявлен, но работать с ним пока нельзя. Сначала (обязательно до вызова первой GTK-функции) нужно вызвать инициализирующую функцию gtk_init() и передать ей два два параметра — аргументы функции main(). После того, как библиотека инициализирована, нужно вызвать функцию gtk_window_new(), которая создает окно (напомню, что пока окно объявлено, но не создано). Теперь, когда виджит окна создан, можно установить его свойства и определить реакцию на сигналы. Установим свойство Title (заголовок) окна. Это делается с помощью функции gtk_window_set_title():
gtk_window_set_title(GTK_WINDOW(window1), "Заголовок");
Теперь можно отобразить наше окно:
gtk_widget_show(window1);
Чтобы наше приложение могло реагировать на события оконной среды (например, щелчок мыши), нужно вызвать функцию gtk_main(). Функции gtk_init() и gtk_main() должны присутствовать в любой GTK-программе.
Теперь откомпилируем наше приложение. Для этого введем следующую команду в командной строке:
$ gcc first.с -о first `gtk-config --cflags` `gtk-config --libs`
Флаги `gtk config --cflags` `gtk-config --libs`
нужно использовать при компиляции любой GTK-программы. Если компиляция не удается, то проверьте, что вы используете апострофы (`
), а не одинарные кавычки ('
), и что программа gtk-config у вас установлена.
Запустим нашу программу в эмуляторе терминала X Window (или оконной среды GNOME/KDE):
$ ./first
Вы увидите окно, изображенное на рис. 23.1.
Рис. 23.1. Простое окно
Теперь закроем окно и перейдем к терминалу: окно закрыто, мы его больше не видим, а терминал не освобожден. Наша программа не реагирует на событие закрытия окна. По идее, когда графическая среда закрывает окно, программа должна завершить свою работу. А наша программа этого не делает. Значит, нужно «научить» ее реагировать на события (сигналы) оконной системы. Для этого нажмите в терминале Ctrl+С и отредактируйте исходный текст программы следующим образом:
Листинг 23.3. Добавим реакцию на закрытие окна
#include
int main(int argc, char *argv[]) {
GtkWidget *window1;
gtk_init(*argc, &argv);
window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window1), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
gtk_widget_show(window1);
gtk_main();
return 0;
}
Функция gtk_signal_connect() устанавливает реакцию объекта window1
на сигнал destroy и вызывает функцию qtk_main_quit() для завершения работы программы.
А что если нам при завершении работы программы нужно выполнить какие-нибудь специфические действия, например, удалить временные файлы? Тогда нужно написать свою функцию-обработчик события destroy (листинг 23.4).
Эта функция будет называется destroy_window1()
, и мы «пропишем» ее в функции gtk_signal_connect() в качестве обработчика события закрытия окна вместо gtk_main_quit(). Делать она не будет ничего, просто вызовет стандартную функцию gtk_main_quit().
Листинг 23.4. Добавляем собственную функцию-обработчик завершения работы
#include
void destroy_window1(GtkWidget *widget, gpointer data);
int main(int argc, char *argv[]) {
GtkWidget *window1;
gtk_init(&argc, &argv);
window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window1), "destroy",
(GtkSignalFunc)destroy_window1, &window1);
gtk_widget_show(window1);
gtk_main();
return(0);
}
void destroy_window1(GtkWidget *widget, gpointer data) {
gtk_main_quit();
}
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии