GTK+ 2.0 Tutorial

<<< Previous

Container Widgets

Next >>>


Прокручиваемое окно

Прокручиваемое окно (Scrolled windows) используется для создания большой области содержащей другие виджеты с возможность постепенного просмотра содержимого. Вы можете вставлять в прокручиваемое окно любой тип виджетов и содержимое будет доступно несмотря на размер, благодаря scrollbars.

Функция для создания прокручиваемого окна:

GtkWidget *gtk_scrolled_window_new( GtkAdjustment *hadjustment, GtkAdjustment *vadjustment );

Первый аргумент отвечает за горизонтальное регулирование, второй за вертикальное. Все значения могут быть равны NULL.

void gtk_scrolled_window_set_policy( GtkScrolledWindow *scrolled_window, GtkPolicyType hscrollbar_policy, GtkPolicyType vscrollbar_policy );

Эта функция устанавливает политику использования полосы прокручивания. Первый аргумент - окно прокручивания которое вы хотите настроить. Второй - политика горизонтального прокручивания и третий - политика вертикального прокручивания.

Политика может быть двух типов, GTK_POLICY_AUTOMATIC или GTK_POLICY_ALWAYS. GTK_POLICY_AUTOMATIC автоматически определяет необходимость появления полосы прокручивания, а GTK_POLICY_ALWAYS всегда показывает полосу прокручивания.

Вы можете размещать объекты в окне прокручивания с помощью функции:

void gtk_scrolled_window_add_with_viewport( GtkScrolledWindow *scrolled_window, GtkWidget *child);

В этом примере в окно прокручивания помещено 100 кнопок переключателей. В исходном коде прокомментированны только плохо знакомые вам части.

#include <stdio.h> #include <gtk/gtk.h> void destroy( GtkWidget *widget, gpointer data ) { gtk_main_quit (); } int main( int argc, char *argv[] ) { static GtkWidget *window; GtkWidget *scrolled_window; GtkWidget *table; GtkWidget *button; char buffer[32]; int i, j; gtk_init (&argc, &argv); /* Создаём новый диалог окна прокручивания для упаковки */ window = gtk_dialog_new (); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), NULL); gtk_window_set_title (GTK_WINDOW (window), "GtkScrolledWindow example"); gtk_container_set_border_width (GTK_CONTAINER (window), 0); gtk_widget_set_size_request (window, 300, 300); /* создаём новое окно прокручивания. */ scrolled_window = gtk_scrolled_window_new (NULL, NULL); gtk_container_set_border_width (GTK_CONTAINER (scrolled_window), 10); /* Политика появления полос прокручивания GTK_POLICY AUTOMATIC, или GTK_POLICY_ALWAYS. * GTK_POLICY_AUTOMATIC автоматически определяет необходимость полосы прокручивания * GTK_POLICY_ALWAYS всегда выводит полосу прокручивания даже если прокручивать нечего * Первая - горизонтальная полоса прокручивания,вторая - вертикальная */ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); /* Создаём окно диалога с упакованным в него vbox */ gtk_box_pack_start (GTK_BOX (GTK_DIALOG(window)->vbox), scrolled_window, TRUE, TRUE, 0); gtk_widget_show (scrolled_window); /* создаём таблицу 10 на 10 */ table = gtk_table_new (10, 10, FALSE); /* устанавливаем интервал в 10 на x и 10 на y */ gtk_table_set_row_spacings (GTK_TABLE (table), 10); gtk_table_set_col_spacings (GTK_TABLE (table), 10); /* упаковываем таблицу в окно прокручивания */ gtk_scrolled_window_add_with_viewport ( GTK_SCROLLED_WINDOW (scrolled_window), table); gtk_widget_show (table); /* просто создаём сетку из кнопок для демонстрации окна прокручивания */ for (i = 0; i < 10; i++) for (j = 0; j < 10; j++) { sprintf (buffer, "button (%d,%d)\n", i, j); button = gtk_toggle_button_new_with_label (buffer); gtk_table_attach_defaults (GTK_TABLE (table), button, i, i+1, j, j+1); gtk_widget_show (button); } /* Добавляем в диалог кнопку "close" */ button = gtk_button_new_with_label ("close"); g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (gtk_widget_destroy), G_OBJECT (window)); /* устанавливаем кнопку по умолчанию */ GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (window)->action_area), button, TRUE, TRUE, 0); /* Перехватываем сигнал нажатия клавиши "Enter" для активизации кнопки по умолчанию */ gtk_widget_grab_default (button); gtk_widget_show (button); gtk_widget_show (window); gtk_main(); return 0; }

Попробуйте по изменять размеры окна, чтобы увидеть реакцию полос прокручивания. Вы можете использовать функцию gtk_widget_set_size_request() для установки размеров окна или других виджетов по умолчанию.


<<< Previous

Home

Next >>>

Viewports

Up

Button Boxes