Как я и обещал, в этом шаге будут рассмотрены подробные описания функций создания и модификации контейнеров. Первая функция, которой скорее всего будут пользоваться:
GtkWidget *gtk_hbox_new (gint homogeneous, gint spacing); GtkWidget *gtk_vbox_new (gint homogeneous, gint spacing);
Труднопроизносимый аргумент homogeneous отвечает за автоматическое распределение пространства для объектов. Если этот аргумент TRUE, то все объекты в вертикальном контейнере имеют одинаковую высоту, а в горизонтальном - ширину. Аргумент spacing контролирует расстояние (в пикселях) между объектами...
После того, как контейнер создан, необходимо добавить в него виджеты:
void gtk_box_pack_start ( GtkBox *box, GtkWidget *child, gint expand, gint fill, gint padding ); void gtk_box_pack_end ( GtkBox *box, GtkWidget *child, gint expand, gint fill, gint padding );
Единственная разница между этими двумя функциями в том, что gtk_box_pack_start при соответствии прочих параметров выравнивает виджеты по левому краю, а gtk_box_pack_end по правому.
Обратите внимание, что первый аргумент (сам контейнер) имеет тип GtkBox, поэтому необходимо использовать приведение типа GTK_BOX или заранее объявлять переменную как GtkBox*. Второй аргумент определяет виджет, который упаковывается.
Если параметр expand установлен в TRUE, то виджеты автоматически центрируются в контейнере (занимает всю отведенную для этого площадь). Иначе можно выполнить выравнивание налево или направо, в зависимости от того, какую из двух функций вы используете.
После всех этих добавлений нужно отобразить сам контейнер и находящиеся в нем компоненты:
void gtk_widget_show (GtkWidget* widget);
А еще нужно не забыть сам контейнер добавить в само окно - тоже разновидность контейнера...
void gtk_container_add(GtkContainer* container, GtkWidget* widget);
Это обычный порядок действий при распределении компонентов по окну. В следующием шаге мы рассмотрим альтернативный вариант - размещения в таблице.