неподвижный контейнер
неподвижный контейнер позволяет помещать
виджеты, неподвижно в пределах окна, в
позиции относительно верхнего левого
угла. позиция виджетов может быть
изменена динамически.
немногие функции
связаны с неподвижным виджетом:
gtkwidget* gtk_fixed_new( void );
void gtk_fixed_put( gtkfixed *fixed,
gtkwidget *widget,
gint x,
gint y );
void gtk_fixed_move( gtkfixed *fixed,
gtkwidget *widget,
gint x,
gint y );
|
функция gtk_fixed_new() -
создаёт неподвижный контейнер.
gtk_fixed_put() - помещает
дочерний виджет в неподвижный контейнер,
в позицию относительно x и y.
gtk_fixed_move() - позволяет
перемещать виджет в новую позицию.
void gtk_fixed_set_has_window( gtkfixed *fixed,
gboolean has_window );
gboolean gtk_fixed_get_has_window( gtkfixed *fixed );
|
обычно, неподвижные виджеты не имеют
собственного окна x. так как это
отличается от поведения неподвижных
виджетов в более ранних выпусках gtk,
функция gtk_fixed_set_has_window() позволяет создание
неподвижных виджетов с их собственным
окном.
следующий
пример демонстрирует использование
неподвижных контейнеров (fixed container).

#include <gtk/gtk.h>
/* будем использовать некоторые глобальные
* переменные, чтобы хранить позицию виджета
* в пределах неподвижного контейнера */
gint x = 50;
gint y = 50;
/* эта функция обратного вызова перемещает кнопку в новую позицию в неподвижном контейнере. */
void move_button( gtkwidget *widget,
gtkwidget *fixed )
{
x = (x + 30) % 300;
y = (y + 50) % 300;
gtk_fixed_move (gtk_fixed (fixed), widget, x, y);
}
int main( int argc,
char *argv[] )
{
/* gtkwidget хранит типы виджетов */
gtkwidget *window;
gtkwidget *fixed;
gtkwidget *button;
gint i;
/* инициализируем gtk */
gtk_init (&argc, &argv);
/* создаём новое окно */
window = gtk_window_new (gtk_window_toplevel);
gtk_window_set_title (gtk_window (window), "fixed container");
/* подключаем событие "destroy" к обработчику сигналов */
g_signal_connect (g_object (window), "destroy",
g_callback (gtk_main_quit), null);
/* определяем ширину окантовки окна. */
gtk_container_set_border_width (gtk_container (window), 10);
/* создаём неподвижный контейнер */
fixed = gtk_fixed_new ();
gtk_container_add (gtk_container (window), fixed);
gtk_widget_show (fixed);
for (i = 1 ; i <= 3 ; i++) {
/* создаём кнопку с ярлыком "нажми меня" */
button = gtk_button_new_with_label ("нажми меня");
/* когда кнопка получает сигнал "clicked", то вызывается функция
* move_button() с помещенным в неё в качестве аргумента
* неподвижным контейнером. */
g_signal_connect (g_object (button), "clicked",
g_callback (move_button), (gpointer) fixed);
/* упаковываем кнопку в неподвижный контейнер. */
gtk_fixed_put (gtk_fixed (fixed), button, i*50, i*50);
/* последний шаг - отображаем новый виджет. */
gtk_widget_show (button);
}
/* отображаем всё окно */
gtk_widget_show (window);
/* входим в цикл */
gtk_main ();
return 0;
}
|
|