GtkWidget *window1; // главное окно
GtkWidget *event_box1; // eventbox
GtkWidget *label; // надпись
/* Инициализируем GTK */
gtk_init( &argc, &argv );
/* Создаем окно с заголовком "Надпись" */
window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window1), "Надпись");
/* Устанавливаем реакцию на закрытие окна */
gtk_signal_connect(GTK_OBJECT(window1), "destroy",
GTK_SIGNAL_FUNC(gtk_exit), NULL );
/* устанавливаем ширину рамки контейнера — окна */
gtk_container_set_border_width(GTK_CONTAINER(window1), 10);
/* создаем event_box */
event_box1 = gtk_event_box_new();
/* помещаем event_box в контейнер */
gtk_container_add(GTK_CONTAINER(window1), event_box1);
/* отображаем event_box */
gtk_widget_show(event_box1);
/* создаем надпись */
label = gtk_label_new(" -== Click here to exit. ==- ");
/* помещаем надпись в контейнер event_box */
gtk_container_add(GTK_CONTAINER(event_box1), label);
/* отображаем окно */
gtk_widget_show(label);
/* устанавливаем реакцию GtkLabel на щелчок */
/*(при щелчке - выход) */
gtk_widget_set_events(event_box1, GDK_BUTTON_PRESS_MASK);
gtk_signal_connect(GTK_OBJECT(event_box1), "button_press_event",
GTK_SIGNAL_FUNC(gtk_exit), NULL);
gtk_widget_realize(event_box1);
/* изменяем курсор над надписью — курсор превратится в руку */
gdk_window_set_cursor(event_box1->window, gdk_cursor_new(GDK_HAND1));
/* отображаем окно */
gtk_widget_show(window1);
gtk_main();
return 0;
}
Откомпилируйте и запустите программу. Над надписью указатель мыши должен принять вид руки (как в браузере над ссылкой). При щелчке на надписи программа будет закрыта.
Если вы хотите создать надпись на русском языке, то подключите заголовок locale.h и вызовите функцию:
setlocale(LC_ALL, "ru_RU.KOI8-R");
Конечно, значение локали у вас может быть другим. Эту функцию нужно вызвать ДО инициализации GTK+.
Рис. 23.2. Надпись
23.4. Виджиты
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
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии