Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
В табл. 16.1 описаны параметры, которые вы можете передавать в функцию
gtk_box_pack_startgtk_box_pack_endТаблица 16.1
| Параметр | Описание |
|---|---|
GtkBox *box | Заполняемый упаковочный контейнер |
GtkWidget *child | Виджет, который следует поместить в упаковочный контейнер |
gboolean expand | Если равен TRUETRUE |
gboolean fill | Если равен TRUEexpandTRUE |
guint padding | Размер отступа вокруг виджета в пикселах |
Давайте теперь рассмотрим эти виджеты упаковочных контейнеров и создадим более сложный пользовательский интерфейс, демонстрирующий вложенные упаковочные контейнеры (упражнение 16.3).
В этом примере вы спланируете размещение нескольких простых виджетов-меток типа
GtkLabelGtkHBoxGtkVBox#include <gtk/gtk.h>void closeApp(GtkWidget *window, gpointer data) { gtk_main_quit();}/* Обратный вызов позволяет приложению отменить событие close/destroy. (Для отмены возвращает TRUE.) */gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) { printf("In delete_eventn"); return FALSE;}int main (int argc, char *argv[]) { GtkWidget *window; GtkWidget *label1, *label2, *label3; GtkWidget *hbox; GtkWidget *vbox; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW window), "The Window Title"); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_default_size(GTK_WTNDOW(window), 300, 200); g_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(closeApp), NULL); g_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(delete_event), NULL); label1 = gtk_label_new("Label 1"); label2 = gtk_label_new("Label 2"); label3 = gtk_label_new("Label 3"); hbox = gtk_hbox_new(TRUE, 5); vbox = gtk_vbox_new(FALSE, 10); gtk_box_pack_start(GTK_BOX(vbox), label1, TRUE, FALSE, 5); gtk_box_pack_start(GTK_BOX(vbox), label2, TRUE, FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 5); gtk_box_pack_start(GTK_BOX(hbox), label3, FALSE, FALSE, 5); gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show_all(window); gtk_main(); return 0;}Когда вы выполните эту программу, то увидите следующую схему расположения виджетов-меток в вашем окне (рис. 16.6).

Рис. 16.6
Как это работает
Вы создаете два виджета упаковочных контейнеров:
hboxvboxgtk_box_pack_startvboxlabel1label2label2label1vboxlabel3hboxВ заключение
hboxgtk_widget_show_allСхему размещения упаковочного контейнера легче понять с помощью блок-схемы, показанной на рис. 16.7.

Рис. 16.7
Познакомившись с виджетами, сигналами, обратными вызовами и виджетами-контейнерами, вы рассмотрели основы комплекта инструментов GTK+. Но для того чтобы стать программистом, профессионально применяющим GTK+, нужно понять, как наилучшим образом использовать имеющиеся в комплекте виджеты.
Виджеты GTK+
В этом разделе мы рассмотрим API самых популярных виджетов GTK+, которые вы будете применять чаще всего в своих приложениях.
GtkWindow
GtkWindowGtkWidget +---- GtkContainer