Сигналы

Далее, вы захотите узнать как реагировать, когда пользователь манипулирует виджетами. В этом простом приложении, есть две интересные вещи, которые могут произойти: пользователь может нажать на кнопку, или закрыть окно, используя рамку, предоставляемую оконным менеджером. Виджеты (на самом деле, все наследники GtkObject) испускают сигналы, когда происходит что-то интересное, и на что программа захочет ответить. Для ответа на сигнал, вы должны подключить обработчик к нему, то есть зарегистрировать функцию, которая будет вызываться тогда, когда сигнал испущен. Вот снова этот код: gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(delete_event_cb), NULL); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(button_click_cb), label);

"gtk_signal_connect()" определяет, за каким GtkObject следить, к какому сигналу подключиться, обработчик, который подключить, и, наконец, аргумент "user_data" -- это произвольный gpointer, который будет передан в обоработчик. Макрос "GTK_SIGNAL_FUNC()" транслирует обработчик в стандартную функцию; так как обработчики имеют разнообразие типов, альтернативой будут десятки вариантов "gtk_signal_connect()".

Gtk+ выполняет обильное количество проверок безопасности во время выполнения; макрос "GTK_OBJECT()" включает проверку типа в дополнение к транслирванию C, а "gtk_signal_connect()" проверит, действительно ли объект может испускать сигнал, который вы указали.


Linux Land
2000-09-15