начало
первое
что нужно сделать, это конечно скачать
и установить gtk. вы всегда можете найти
последнюю версию на ftp.gtk.org.
вы также можете посмотреть информацию
об исходном коде gtk на http://www.gtk.org/.
gtk использует gnu autoconf для конфигурации.
для просмотра справки наберите ./configure
--help.
исходный код gtk содержит все примеры
приведенные в данном руководстве, а
также makefiles для упрощенной компиляции.
для начала мы рассмотрим
пример самой простой программмы на gtk.
эта программма создает окно размером
200x200 pixel и не совершает никаких действий
кроме как выход после ввода соответствующей
команды shell.
#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
gtkwidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (gtk_window_toplevel);
gtk_widget_show (window);
gtk_main ();
return 0;
}
|
вы можете скомпилировать программму
используя компилятор gcc:
gcc base.c -o base `pkg-config --cflags --libs
gtk+-2.0`
о возможных вариантах компиляции
объясняется ниже в компиляция
hello world.
все программмы будут конечно включать
заголовочный файл gtk/gtk.h, который объявляет
переменные, функции, структуры, и т.д.
использующиеся в вашей gtk программме.
следующая строка:
вызов функции gtk_init(gint *argc, gchar ***argv)
которая используется во всех gtk программмах.
она создает установки визуальной и
цветовой карты, а также запускает процесс
вызова функции gdk_init(gint *argc, gchar ***argv). эта
функция инициализирует библиотеки для
использования, устанавливает по умолчанию
обработчики сигналов, и проверяет
аргументы командной строки вашей
программмы, производя поиск одного из
следующих:
--gtk-module
--g-fatal-warnings
--gtk-debug
--gtk-no-debug
--gdk-debug
--gdk-no-debug
--display
--sync
--name
--class
проходя по списку происходит поиск
объявленных аргументов вашей программмы
для дальнейшего разбора или игнорирования.
так создаётся ряд стандартных аргументов
для всех gtk программм.
следующие две строчки кода выводят
на дисплей окно программмы.
window = gtk_window_new (gtk_window_toplevel);
gtk_widget_show (window);
|
аргумент gtk_window_toplevel
определяет специфику расположения и
оформления окна в менеджере окон. чтобы
не создавалось окно размером 0x0, по
умолчанию принят размер 200x200 для всех
дочерних окон, вы также можете
манипулировать этими значениями.
функция gtk_widget_show() позволяет gtk понять
какие параметры мы установили для
виджетов и правильно отобразить их.
последняя строка вводит в главный
цикл gtk процесса (main processing loop).
gtk_main() ещё один вызов который используется
в любой программме gtk. когда программа
доходит до этого вызова, gtk начинает
ожидать x события (такого как нажатие
кнопки мыши или клавиатуры), прерывания,
или файлового ввода вывода. однако в
нашем простом примере никаких событий
не ожидается.
hello world в gtk
еще
одна программма в виде окна с кнопкой.
это классический "hello world" с
использованием gtk.
#include <gtk/gtk.h>
/* это функция обратного вызова. аргументы в данном
* примере отсутствуют.
* подробней об обратных вызовах будет сказано ниже. */
void hello( gtkwidget *widget,
gpointer data )
{
g_print ("hello world\n");
}
gint delete_event( gtkwidget *widget,
gdkevent *event,
gpointer data )
{
/* если вы вернете false в "delete_event" обработчик сигналов,
* gtk создаст "destroy" разрушающий сигнал. возвращенный true говорит
* о нежелании закрывать окно.
* это полезно при всплывающих типах диалогов
* 'вы уверены что хотите выйти?'*/
g_print ("delete event occurred\n");
/* измените true на false и главное окно будет закрыто
* с "delete_event". */
return true;
}
/* другой вызов */
void destroy( gtkwidget *widget,
gpointer data )
{
gtk_main_quit ();
}
int main( int argc,
char *argv[] )
{
/* gtkwidget является типом хранения для виджетов */
gtkwidget *window;
gtkwidget *button;
/* этот вызов используется во всех gtk программмах. аргументы из командной строки
* разбираются и возвращаются в приложение. */
gtk_init (&argc, &argv);
/* создается новое окно */
window = gtk_window_new (gtk_window_toplevel);
/* когда окну поступает "delete_event" сигнал (это делает
* менеджер окон, обычно "close" опция в верхнем заголовке окна),
* задаётся вопрос delete_event() функции, как обсуждалось выше.
* данные поступают в функцию обратного вызова являясь
* null и игнорируются. */
g_signal_connect (g_object (window), "delete_event",
g_callback (delete_event), null);
/* здесь мы соединяем "destroy" событие с обработчиком сигнала.
* это делается вызовом gtk_widget_destroy() в окне,
* или если возвращаем false в обратном вызове "delete_event". */
g_signal_connect (g_object (window), "destroy",
g_callback (destroy), null);
/* устанавливаем ширину окантовки окна */
gtk_container_set_border_width (gtk_container (window), 10);
/* создаем новую кнопку с ярлыком "hello world". */
button = gtk_button_new_with_label ("hello world");
/* когда кнопка получит "clicked" сигнал, то вызовет
* функцию hello() с null аргументом. функция hello()
* определена выше. */
g_signal_connect (g_object (button), "clicked",
g_callback (hello), null);
/* это закроет окно вызвав
* gtk_widget_destroy(window) когда поступит "clicked". снова сигнал
* закрытия мог поступить от сюда, или от менеджера окон. */
g_signal_connect_swapped (g_object (button), "clicked",
g_callback (gtk_widget_destroy),
g_object (window));
/* помещаем кнопку внутрь окна */
gtk_container_add (gtk_container (window), button);
/* последний этап, вывод кнопки на экран. */
gtk_widget_show (button);
/* вывод на экран окна. */
gtk_widget_show (window);
/* все gtk приложения содержат gtk_main(). здесь заканчивается контроль
* и происходит ожидание(нажатие клавиши или мышки) */
gtk_main ();
return 0;
}
|
|