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

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

Жанры

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

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

Шрифт:

 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;

}

23.3. Первая программа на GTK+

23.3.1. Виджиты

Перед написанием самой простой 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.3.2. Окна

Сейчас мы напишем программу, которая будет формировать небольшое графическое окошко. Начнем сразу с исходного кода — так будет проще понять, что есть что.

Листинг 23.2. Простое окно (файл first.с)

#include <gtk/gtk.h>

int main(int argc, char *argv[]) {

 GtkWidget *window1;

 gtk_init(&argc, &argv);

 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. Простое окно

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

Изгой Проклятого Клана

Пламенев Владимир
1. Изгой
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Изгой Проклятого Клана

Сирийский рубеж 3

Дорин Михаил
7. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Сирийский рубеж 3

Ермак. Телохранитель

Валериев Игорь
2. Ермак
Фантастика:
альтернативная история
7.50
рейтинг книги
Ермак. Телохранитель

Третий Генерал: Том III

Зот Бакалавр
2. Третий Генерал
Фантастика:
попаданцы
рпг
аниме
5.00
рейтинг книги
Третий Генерал: Том III

Наследник павшего дома. Том II

Вайс Александр
2. Расколотый мир [Вайс]
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник павшего дома. Том II

Я все еще не князь. Книга XV

Дрейк Сириус
15. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я все еще не князь. Книга XV

Наташа, не реви! Мы всё починим

Рам Янка
7. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Наташа, не реви! Мы всё починим

Барон меняет правила

Ренгач Евгений
2. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон меняет правила

Петля, Кадетский Корпус. Книга пятая

Алексеев Евгений Артемович
5. Петля
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Петля, Кадетский Корпус. Книга пятая

An ordinary sex life

Астердис
Любовные романы:
современные любовные романы
love action
5.00
рейтинг книги
An ordinary sex life

Неудержимый. Книга XV

Боярский Андрей
15. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XV

Черные ножи

Шенгальц Игорь Александрович
1. Черные ножи
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черные ножи

Кай из рода красных драконов 2

Бэд Кристиан
2. Красная кость
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кай из рода красных драконов 2

Александр Агренев. Трилогия

Кулаков Алексей Иванович
Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Александр Агренев. Трилогия