The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

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






Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру