Вход/Регистрация
Linux: Полное руководство
вернуться

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

Шрифт:

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

  • Читать дальше
  • 1
  • ...
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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