gtk_signal_connect() в качестве обработчика события закрытия окна вместо gtk_main_quit(). Делать она не будет ничего, просто вызовет стандартную функцию gtk_main_quit().

Листинг 23.4. Добавляем собственную функцию-обработчик завершения работы

#include <gtk/gtk.h>

void destroy_window1(GtkWidget *widget, gpointer data);

int main(int argc, char *argv[]) {

 GtkWidget *window1;

 gtk_init(&argc, &argv);

 window1 = gtk_window_new(GTK_WINDOW_TOPLEVEL);

 gtk_signal_connect(GTK_OBJECT(window1), 'destroy',

  (GtkSignalFunc)destroy_window1, &window1);

 gtk_widget_show(window1);

 gtk_main();

 return(0);

}

void destroy_window1(GtkWidget *widget, gpointer data) {

 gtk_main_quit();

}

23.3.3. Изменение размеров окна

Вам кажется, что окно слишком маленькое и не подходит для нашей программы? Для изменения размеров окна лучше всего использовать функцию

void gtk_window_set_default_size(GtkWindow *window,

 gint width, gint height);

Эта функция устанавливает ширину окна window равной width, а высоту — height.

Для изменения позиции окна на экране используется функция

void gtk_widget_set_uposition(GtkWidget *widget,

 gint coord_x, gint coord_y);

Эту же функцию можно использовать для изменения расположения любого виджита — не обязательно, чтобы последний был окном.

Первая функция объявлена в файле gtk/gtkwindow.h, а вторая — в файле gtk/gtkwidget.h:

#include <gtk/gtkwindow.h>

#include <gtk/gtkwidget.h>

...

gtk_window_set_default_size(window1, 200, 300);

gtk_wigdet_set_uposition(window1, 50, 50);

23.3.4. Обработка сигналов

Перед тем, как перейти к следующему пункту, нужно еще раз рассмотреть функцию gtk_signal_connect(). Данной функции нужно передать четыре параметра:

♦ GtkObject *object — объект, которому может быть послан сигнал;

♦ const gchar *name — имя сигнала, например, «destroy»;

♦ GtkSignalFunc func — имя функции обратного вызова, то есть функции, которая будет вызвана для обработки сигнала;

♦ gpointer data — любые данные, которые будут переданы функции- обработчику.

Что такое сигнал? Как только пользователь переместил мышь, оконная среда посылает приложению сигнал, оповещающий о том, что мышь была перемещена. Как только пользователь щелкнул мышью, приложение получит сигнал об этом щелчке. Обрабатывать все сигналы может окно, но удобнее для каждого виджита установить собственную реакцию на события.

Функция, которая обрабатывает сигнал, называется по-разному: функция-обработчик (мы будем использовать именно это название), функция обратного вызова и callback-функция. Такой функции нужно передать два параметра (их передаст сама GTK):

♦ GtkWidget *widget — виджит;

♦ gpointer data — данные.

Параметры, которые нужно передать обработчику, зависят от передаваемого сигнала. Например, если бы мы передавали не сигнал «destroy», а сигнал «delete-event», то нужно было бы указать уже три параметра:

♦ GtkWidget *widget — виджит;

♦ GdkEvent *event — событие;

♦ gpointer data — данные.

Вот наиболее часто используемые сигналы:

♦ button_press_event — нажата левая кнопка мыши;

♦ button_release_event — левая кнопка отпущена;

♦ motion_notify_event — движение мыши;

♦ delete_event — удаление объекта;

♦ 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 — нажата третья кнопка;

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

0

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

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