Изучение GTK+ мы
продолжим с присвоения заголовка окну
и добавления виджетов. За основу возьмем
наш
прошлый проект, в котором мы создали
простое окно GTK+.
1) Добавим в
код нашего проекта строчку которой мы
присвоим заголовок
нашему
окну. Эту
строчку нужно поместить где-нибудь
после window =
gtk_window_new(GTK_WINDOW_TOPLEVEL):
gtk_window_set_title
(GTK_WINDOW (window), "Gtk_p2");
2) Теперь
разместим наше окно в центре рабочего
стола. Для этого после строчки
gtk_window_set_title (GTK_WINDOW
(window), "Gtk_p2")
мы
разместим строчку:
gtk_window_set_position(GTK_WINDOW(window),
GTK_WIN_POS_CENTER);
3) Теперь
зададим размер окна, размер окна будет
200 на 200 пикселей. Для этого после строчки gtk_window_set_position(GTK_WINDOW(window),
GTK_WIN_POS_CENTER)
нужно добавить строчку:
gtk_window_set_default_size(GTK_WINDOW(window),
200, 200);
4) Следующей
строчкой мы установим ширину границы
нашего окна в 10 пикселей:
gtk_container_set_border_width
(GTK_CONTAINER (window), 10);
разместите ее
после строчки:
gtk_window_set_default_size(GTK_WINDOW(window),
200, 200);
5) Так как в
главном окне программы мы разместим
больше чем один виджет, то для
позиционирования виджетов и установки
их размеров нам необходимо воспользоваться
контейнером в который мы и упакуем все
элементы. В GTK+ существует большое
число контейнеров в которые мы можем
размещать наши виджеты. В нашей программе
мы воспользуемся контейнером, который
называется GtkGrid. Данный контейнер
позволяет размещать виджеты в ряд или
в колонку. Следующей строчкой мы создадим
контейнер:
grid = gtk_grid_new();
где
grid это указатель на наш контейнер —
сетка, так что после определения указателя
на наше окно GtkWidget *window = NULL, разместите
определение GtkWidget *grid = NULL.
6)
Чтобы упаковать контейнер в наше окно,
то необходимо воспользоваться функцией:
gtk_container_add
(GTK_CONTAINER (window), grid);
7) После строчки
кода, где мы определили указатель на
контейнер-сетку GtkWidget *grid = NULL,
нам необходимо определить указатели
на три виджета, которые мы в дальнейшем
разместим в окне нашей
программы.
1.
Указатель на поле редактирования:
GtkWidget *entry = NULL;
2.
Указатель на кнопку: GtkWidget *button =
NULL;
3.
Указатель на метку: GtkWidget *label =
NULL;
8) Далее нам
необходимо создать объект поля
редактирования и прикрепить его к нашему
контейнеру — сетки, разместить его в
параметрах сетки.
а) Создание поля
редактирования: entry = gtk_entry_new();
б) Размещаем в
сетке: gtk_grid_attach(GTK_GRID(grid), entry, 0, 0, 1, 1);
Тоже самое нужно
сделать и для метки текста и для кнопки.
Метка текста:
а) Создание
метки: label = gtk_label_new("Some text");
б)
Размещаем в сетке: gtk_grid_attach(GTK_GRID(grid),
label, 0, 1, 2, 1);
Кнопка:
а)
Создание кнопки: button =
gtk_button_new_with_label("Set text");
б)
Размещаем в сетке: gtk_grid_attach(GTK_GRID(grid),
button, 1, 0, 1, 1);
Функция
gtk_grid_attach размещает виджет в контейнере
— сетка. Сетка состоит из клеток. Каждый
виджет в сетке может заполнить одну или
несколько клеток по вертикали и по
горизонтали.
9) Ну
и последнее, так как в нашей программе
не один виджет, а несколько, то для показа
окна, со всеми виджетами в нем, нам
необходимо заменить функцию
gtk_widget_show(window); на gtk_widget_show_all(window);.
Теперь,
давайте, соберем наш проект. Результатом
нашей работы будет окно с размещенными
на нем элементами управления (смотрите
рисунок 1).
Рисунок 1. Окно с элементами управления
Ниже
размещен весь код программы:
#include <gtk/gtk.h> int main(int argc, char **argv) { GtkWidget *window = NULL; GtkWidget *grid = NULL; GtkWidget *entry = NULL; GtkWidget *button = NULL; GtkWidget *label = NULL; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "Gtk_p2"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WINDOW(window), 200, 200); gtk_container_set_border_width (GTK_CONTAINER (window), 10); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); grid = gtk_grid_new(); gtk_container_add (GTK_CONTAINER (window), grid); entry = gtk_entry_new(); gtk_grid_attach(GTK_GRID(grid), entry, 0, 0, 1, 1); label = gtk_label_new("Some text"); gtk_grid_attach(GTK_GRID(grid), label, 0, 1, 2, 1); button = gtk_button_new_with_label("Set text"); gtk_grid_attach(GTK_GRID(grid), button, 1, 0, 1, 1); gtk_widget_show_all(window); gtk_main(); return 0; }
syntax highlighted by Code2HTML, v. 0.9.1
Комментариев нет:
Отправить комментарий