23.4.1. Рождение, смерть и состояния виджита
23.4.1. Рождение, смерть и состояния виджита
После создания виджита управление ресурсами и памятью, необходимыми ему, выполняется автоматически. Виджиты уничтожаются также автоматически — при разрушении главного окна. Но иногда бывает нужно самостоятельно уничтожить виджит. Сделать это можно с помощью функции:
void gtk_widget_destroy(GtkWidget *widget);
Эта функция объявлена в файле gtk/gtkwidget.h. При уничтожении виджита также уничтожаются все его дочерние виджиты.
Если вы освобождаете виджит из контейнера функцией:
void gtk_container_remove(GtkContainer *cont, GtkWidget *w);
то виджит также будет разрушен.
Иногда нужно переместить виджит из одного контейнера в другой без его уничтожения. Это можно сделать так (мы будем перемещать надпись):
gtk_widget_ref(GTK_WIDGET(label));
gtk_container_remove(GTK_CONTAINER(cont1), label);
gtk_container_add(GTK_CONTAINER(cont2), label);
«Спрятать» виджит можно с помощью функции
void gtk_widget_hide(GtkWidget *w);
Отобразить виджит снова поможет функция gtk_widget_show().
Виджит может находиться в одном из состояний:
? GTK_STATE_NORMAL — нормальное;
? GTK_STATE_ACTIVE — активное (например, нажата кнопка);
? GTK_STATE_PRELIGTH — над виджитом находится указатель мыши;
? GTK_STATE_SELECTED — виджит выбран (установлен фокус ввода);
? GTK_STATE_INSENSITIVE — виджит не реагирует на ввод (сигналы).
Определить состояние виджита можно так:
GTK_WIDGET(w)->state
или с помощью макроса:
GTK_WIDGET_STATE(wid)
описанного в файле gtk/gtkwidget.h.
Сделать виджит неактивным можно так:
gtk_widget_set_sensitive(widget, FALSE);
Если второй параметр функции gtk_widget_set_sensitive() будет равен TRUE, виджит widget станет активным.
Чтобы наш виджит получил фокус ввода, нужно использовать функцию:
gtk_widget_grab_focus(widget);
Данный текст является ознакомительным фрагментом.