23.3.5. Виджит событий — EventBox
23.3.5. Виджит событий — EventBox
Далеко не все виджиты связаны с окнами. Например, GtkLabel (надпись), GtkTable (контейнер-таблица), GtkHBox (горизонтальный контейнер), GtkVBox (вертикальный контейнер) и некоторые другие с окнами не связаны.
Если нужно, чтобы эти виджиты реагировали на определенные сигналы, нужно использовать виджит EventBox, позволяющий привязать сигнал к не связанному с окном виджиту. Следующая программа демонстрирует привязку события button_press_event к виджиту GtkLabel.
Листинг 23.5. Виджит EventBox
#include <gtk/gtk.h>
int main(int argc, char *argv[]) {
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. Надпись
Данный текст является ознакомительным фрагментом.