♦ GDK_BUTTON_RELEASE — кнопка (любая) отпущена;

♦ GDK_KEY_PRESS — нажата клавиша;

♦ GDK_KEY_RELEASE — клавиша отпущена;

♦ GDK_ENTER_NOTIFY — указатель мыши в пределах объекта (виджита);

♦ GDK_LEAVE_NOTIFY — указатель мыши вышел за пределы виджита;

♦ GDK_FOCUS_CHANGE — изменения фокуса ввода;

♦ GDK_OTHER_EVENT — другое событие.

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. Надпись

23.4. Виджиты

23.4.1. Рождение, смерть и состояния виджита

После создания виджита управление ресурсами и памятью, необходимыми ему, выполняется автоматически. Виджиты уничтожаются также автоматически — при разрушении главного окна. Но иногда бывает нужно самостоятельно уничтожить виджит. Сделать это можно с помощью функции:

void gtk_widget_destroy(GtkWidget *widget);

Эта функция объявлена в файле gtk/gtkwidget.h. При уничтожении виджита также уничтожаются все его дочерние виджиты.

Если вы освобождаете виджит из контейнера функцией:

void gtk_container_remove(GtkContainer *cont, GtkWidget *w);

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату