The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

Пример на GtkTable

Следующий код создает таблицу с четырьмя ячейками и тремя детьми; один ребенок покрывает две ячейки. Дети упакованы с использованием различных параметров:

GtkWidget *window;
GtkWidget *button;
GtkWidget *container;

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
container = gtk_table_new(2, 2, FALSE);

gtk_container_add(GTK_CONTAINER(window), container);
gtk_window_set_title(GTK_WINDOW(window), "Table Attaching");
gtk_container_set_border_width(GTK_CONTAINER(container), 10);

/* This would be a bad idea in real code; but it lets us
 * experiment with window resizing. */
gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE);

gtk_signal_connect(GTK_OBJECT(window), "delete_event",
                   GTK_SIGNAL_FUNC(delete_event_cb), NULL);

button = gtk_button_new_with_label("1. Dosn't shrink\nor expand");
gtk_table_attach(GTK_TABLE(container), button, 0, 1, 0, 1,
                 GTK_FILL, GTK_FILL, 0, 0);

button = gtk_button_new_with_label("2. Expands and shrinks\nvertically");
gtk_table_attach(GTK_TABLE(container), button, 0, 1, 1, 2,
                 GTK_FILL, GTK_FILL | GTK_EXPAND | GTK_SHRINK,
                 0, 0);

button = gtk_button_new_with_label("3. Expands and shrinks\n"
                                   "in both directions");
gtk_table_attach(GTK_TABLE(container), button, 1, 2, 0, 2,
                 GTK_FILL | GTK_EXPAND | GTK_SHRINK,
                 GTK_FILL | GTK_EXPAND | GTK_SHRINK, 0, 0);

Поучительно посмотреть на результирующую таблицу после изменения размеров окна. Сначала, краткое изложение того, как присоединяются дети:

  1. Первый ребенок всегда получает свой затребованный размер; он не расширяется и не урезается.
  2. Второй ребенок может расширяться и урезаться только в направлении оси Y.
  3. Третий ребенок может расширяться и обрезаться в любом направлении.

Натуральный размер окна показан на рисунке 3..9; заметьте, что некоторым ячейкам выделено больше места, чем потребовали виджеты внутри них, потому что ячейки таблицы должны оставаться выровненными. (Вспомните, что кнопка с меткой будет требовать достаточно места только для показа метки целиком.) Флаг "GTK_FILL" заставляет GtkTable выделять дополнительное место для самих виджетов, вместо заполнения пустым местом промежутков вокруг них.

Рисунок 3..9: GtkTable перед изменением размеров

Теперь представьте, что пользователь расширяет окно по вертикали; заметьте, что дополнительное пространство добавилось к виджетам с включенным "GTK_EXPAND" в направлении Y -- а именно виджетам два и три -- в то время как виджет в левом верхнем углу остается неизменным. Рисунок 3..10 показывает это состояние дел.

Рисунок 3..10: GtkTable после вертикального расширения

Далее, представьте, что пользователь расширил окно горизонтально; только дочерний виджет номер три может расширяться горизонтально. Рисунок 3..11 это показывает.

Рисунок 3..11: GtkTable после горизонтального расширения

Рисунок 3..12 показывает результат после уменьшения вертикальных размеров таблицы, таким образом недостаточно места по вертикали, чтобы выделить виджетам то, что они запросили. Ребенок номер два получился укороченным, тогда как ребенок номер один получает все вертикальное место, которое ему требуется.

Рисунок 3..12: GtkTable после вертикального сжатия

И, наконец, рисунок 3..13 показывает результат того, что пользователь уменьшил горизонтальные размеры таблицы. Ребенок номер три в этой ситуации получает короткий конец палки.

Рисунок 3..13: GtkTable после горизонтального сжатия

Неплохо было бы попытаться менять размеры вашего окна вышеприведенным образом всякий раз, когда вы проектируете раскладку, чтобы быть уверенным, что все проходит нормально. Определение нормальности варьируется в зависимости от конкретных виджетов, которые вы помещаете в раскладку.


Linux Land
2000-09-15

АКЦИЯ! ПОДПИШИСЬ на журнал Linux Format до 31 января 2012 года и выиграй СУПЕРПРИЗ!

Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

Каждый, кто оформит подписку, получает бонус- объёмные наклейки на системный блок и подарки: с одним из первых выпусков журнала в 2012 году- диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

Подробнее о проведении акции вы можете прочитать на странице сайта.


  Закладки на сайте
  Проследить за страницей
Created 1996-2012 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList