Чтение онлайн

на главную - закладки

Жанры

Linux: Полное руководство

Аллен Питер В.

Шрифт:

♦ destroy_event — уничтожение объекта;

♦ key_press_event — нажата клавиша клавиатуры;

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

♦ enter_notify_event — указатель мыши вошел в пределы объекта;

♦ leave_notify_event — указатель мыши вышел за пределы объекта;

♦ focus_in_event — объект стал активным (получил фокус);

♦ focus_out_event — объект не активен;

♦ drag_begin_event —

начало перемещения объекта;

♦ drag_request_event — запрос на перемещение объекта;

♦ drag_end_event — перемещение объекта;

♦ drop_enter_event — объект перемещен.

Наиболее часто используемые события GDK (используются в функции-обработчике) перечислены ниже:

♦ GDK_NOTHING — не произошло никакого события;

♦ GDK_DELETE — удаление;

♦ GDK_DESTROY — уничтожение;

♦ GDK_MOTION_NOTIFY — уведомление о перемещении;

♦ GDK_BUTTON_PRESS — нажата любая кнопка мыши;

♦ GDK_1BUTTON_PRESS — нажатие первой кнопки мыши;

♦ GDK_2BUTTON_PRESS — нажатие второй кнопки мыши;

♦ GDK_3BUTTON_PRESS — нажата третья кнопка;

♦ 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");

Поделиться:
Популярные книги

Железный поток. Морская душа. Зеленый луч

Серафимович Александр Серафимович
Библиотека мировой литературы для детей
Проза:
советская классическая проза
6.25
рейтинг книги
Железный поток. Морская душа. Зеленый луч

Летний детектив

Полякова Татьяна Викторовна
Детективы:
прочие детективы
7.79
рейтинг книги
Летний детектив

Коммунизм как реальность

Зиновьев Александр Александрович
Документальная литература:
критика
публицистика
6.25
рейтинг книги
Коммунизм как реальность

Тайны ушедшего века. Власть. Распри. Подоплека

Зенькович Николай Александрович
Научно-образовательная:
история
политика
5.00
рейтинг книги
Тайны ушедшего века. Власть. Распри. Подоплека

Масоны

Писемский Алексей Феофилактович
Проза:
русская классическая проза
6.25
рейтинг книги
Масоны

Натюрморт с воронами

Престон Дуглас
4. Пендергаст
Фантастика:
ужасы и мистика
9.37
рейтинг книги
Натюрморт с воронами

Сравнительные жизнеописания

Плутарх
Документальная литература:
биографии и мемуары
8.85
рейтинг книги
Сравнительные жизнеописания

Фантастика 1973-1974

Брюсов Валерий Яковлевич
Фантастика
Фантастика:
научная фантастика
5.00
рейтинг книги
Фантастика 1973-1974

Камень Книга седьмая

Минин Станислав
7. Камень
Фантастика:
фэнтези
боевая фантастика
6.40
рейтинг книги
Камень Книга седьмая

Прокаженная

Мнишек Гелена
Любовные романы:
исторические любовные романы
9.38
рейтинг книги
Прокаженная

Еретики Дюны

Герберт Фрэнк Патрик
5. Хроники Дюны
Фантастика:
эпическая фантастика
8.00
рейтинг книги
Еретики Дюны

Газлайтер. Том 1

Володин Григорий Григорьевич
1. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 1

Прохоровское побоище. Правда о Величайшем танковом сражении

Замулин Валерий Николаевич
Мифы Великой Отечественной
Документальная литература:
прочая документальная литература
5.00
рейтинг книги
Прохоровское побоище. Правда о Величайшем танковом сражении

Я до сих пор не царь. Книга XXVII

Дрейк Сириус
27. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор не царь. Книга XXVII