Шрифт:
Обратите внимание на то, что имя кнопки — "Button 1" — передается в функцию обратного вызова как данные пользователя.
Весь остальной добавленный программный код касается виджета кнопки, создаваемой так же, как окно — вызовом функции
Для расположения кнопки в окне вызывается функция
Как вы уже знаете,
Функция
Виджеты упаковочных контейнеров
Компоновка GUI исключительно важна для удобства применения интерфейса, и добиться наилучшей компоновки труднее всего. Реальная трудность в размещении виджетов заключается в том, что вы не можете полагаться на наличие у всех пользователей одинаковых размеров окон, тем, шрифтов и цветовых схем. То, что может быть отличным интерфейсом для одной системы, в другой системе может оказаться просто нечитаемым.
Для создания GUI, который выглядит одинаково во всех системах, вам необходимо избегать размещения виджетов на основе абсолютных координат и использовать более гибкую систему компоновки. У GTK+ есть для этой цели виджеты контейнеров. Виджеты-контейнеры позволяют управлять компоновкой виджетов в окнах вашего приложения. Виджеты упаковочных контейнеров (box) представляют очень удобный тип виджета-контейнера. GTK+ предлагает множество виджетов-контейнеров других типов, описанных в интерактивной документации к GTK+.
Виджеты упаковочных контейнеров — невидимые виджеты, задача которых — хранить другие виджеты и управлять их компоновкой или схемой размещения. Для управления размером отдельных виджетов, содержащихся в виджете упаковочного контейнера, вы задаете правила вместо координат. Поскольку виджеты упаковочных контейнеров могут содержать любые объекты
У типа
После создания упаковочных контейнеров следует задать два параметра:
Эти параметры управляют компоновкой всех виджетов в конкретном упаковочном контейнере. Параметр
После того как упаковочный контейнер создан, добавьте в него виджеты с помощью функций
Функция
В табл. 16.1 описаны параметры, которые вы можете передавать в функцию
Таблица 16.1
Параметр | Описание |
---|---|
GtkBox *box | Заполняемый упаковочный контейнер |
GtkWidget *child | Виджет, который следует поместить в упаковочный контейнер |
gboolean expand | Если равен TRUE , данный виджет занимает все доступное пространство, используемое совместно с другими виджетами, у которых этот флаг также равен TRUE |
gboolean fill | Если равен TRUE , данный виджет будет занимать всю доступную площадь вместо использования ее как отступа от краев. Действует, только если флаг expand равен TRUE |
guint padding | Размер отступа вокруг виджета в пикселах |