Ну що ж, почнемо!

Найперша річ, яку ви маєте зробити, звичайно ж - завантажити і інсталювати GTK (хоча можете не мучитись: GTK входить в більшість дистрибутивів Linux). Ви завжди можете отримати останню версію з ftp.gtk.org. Також ви можете переглянути інші джерела інформації про GTK з www.gtk.org. GTK використовує GNU autoconf для конфігурування. Після розпаковки наберіть ./configure --help щоб побачити список опцій.

Дистрибутив джерельних кодів GTK містить також і приклади з цього посібника разом з мейкфайлами, щоб відкомпілювати їх.

Щоб почати наш вступ до GTK, ми почнемо з найпростішого прикладу програми. Вона буде створювати вікно розміром 200x200 пікселів і не буде мати способу для виходу крім фізичного завершення процесу.

#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`

Значення незвичайних опцій компілювання пояснено нижче.

Всі програми, звісно, включають заголовок gtk/gtk.h який оголошує змінні, функції, структури, і т.і. які будуть використовуватись в вашій програмі.

Наступний рядок:

gtk_init (&argc, &argv);

викликає функцію 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 вказує на те, що ми хочемо щоб вікно мало оформлення i положення вибране віконним менеджером. Замість того, щоб створювати вікно розміром 0x0, наше вікно без дочірніх вікон за замовчуванням отримує розмір 200x200, тому ним ще можна маніпулювати.

Функція gtk_widget_show() дає GTK знати, що ми вже зробили налаштування атрибутів цього віджету і тепер можна виводити його на екран. Останній рядок входить в головний цикл обробки подій GTK.

gtk_main ();

gtk_main() -- це виклик, який є увсіх програмах під GTK. Коли програма доходить до цієї точки -- GTK зупиняє програму очікуючи на події X-серверу (таких, як клачання мишкою чи натискання на кнопки), завершень часу таймерів або повідомлень про читання/запис файлів.

Одначе в цьому простому прикладі події ігноруються.

(Дзуськи вони ігноруються! Просто в програмі явно не сказано, як саме треба реагувати на певні події. Але віконний менеджер або, коротше СКВ (Система Керування Вікнами) обробляє певні події, наприклад, безпроблемно змінює розміри вікна - перемальовує тло. )