Читаем Linux: Полное руководство полностью

  GTK_SIGNAL_FUNC(delete_event), NULL);

 gtk_signal_connect(GTK_OBJECT(window), "destroy",

  GTK_SIGNAL_FUNC(destroy), &ctrl);

 gtk_window_set_title(GTK_WINDOW(window), caption);

 gtk_container_set_border_width(GTK_CONTAINER(window), 10);

 button = gtk_button_new();

 label = gtk_label_new(" -== Нажмите кнопку ==- " );

 ctrl.app_window = window;

 ctrl.label = label;

 gtk_container_add(GTK_CONTAINER(button), label);

 gtk_container_add(GTK_CONTAINER(window), button);

 gtk_signal_connect(GTK_OBJECT(button), "clicked",

  GTK_SIGNAL_FUNC(button_click), &ctrl);

 gtk_widget_show_all(window);

 gtk_main();

 return(0);

}

// ****************************************************

void quit_confirm(GtkWidget *widget) {

 GtkWidget *quit_form;

 GtkWidget *label;

 GtkWidget *yes_button, *no_button;

 quit_form = gtk_dialog_new();

 gtk_window_set_position(GTK_WINDOW(quit_form),

  GTK_WIN_POS_CENTER);

 gtk_container_set_border_width(GTK_CONTAINER(quit_form),

  10);

 label =

  gtk_label_new("\n Вы действительно хотите выйти? \n*);

 yes_button = gtk_button_new_with_label("Да");

 no_button = gtk_button_new_with_label("Нет");

 gtk_signal_connect_object(GTK_OBJECT(yes_button),

  "clicked",

  GTK_SIGNAL_FUNC(gtk_widget_destroy), (gpointer)widget);

 gtk_container_add(

  GTK_CONTAINER(GTK_DIALOG(quit_form)->action_area), yes_button);

 gtk_signal_connect_object(GTK_OBJECT(no_button),

  "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),

  (gpointer)quit_form);

 gtk_container_add(

  GTK_CONTAINER(GTK_DIALOG(quit_form)->action_area), no_button);

 gtk_container_add(

  GTK_CONTAINER(GTK_DIALOG(quit_form)->vbox), label);

 gtk_window_set_modal(GTK_WINDOW(quit_form), TRUE);

 gtk_widget_show_all(quit_form);

}

gint delete_event(GtkWidget *widget, GdkEvent *event,

 gpointer data) {

 quit_confirm(widget);

 return(TRUE);

}

void destroy(GtkWidget *widget, gpointer data) {

 printf{"GOOD-BYE!");

 gtk_main_quit();

}

static void button_click(GtkWidget *widget,

 gpointer data ) {

 static gint i = 0;

 GtkWidget *app_window;

 GtkWidget *label;

 gchar msg[256];

 app_window = GTK_WIDGET(((w_ctrl *)data)->app_window);

 label = GTK_WIDGET(((w_ctrl*)data)->label);

 i++;

 sprintf(msg, "Вы нажали кнопку: %d раз(а)", i);

 gtk_label_set_text(GTK_LABEL(label), msg);

}

Думаю, текст программы ясен без лишних комментариев. Нужно лишь пояснить один очень важный момент. Обратите внимание на то, что мы переопределили обработчик для события delete_event.

gtk_signal_connect(GTK_OBJECT(window), "delete_event",

 GTK_SIGNAL_FUNC(delete_event), NULL);

gtk_signal_connect(GTK_OBJECT(window), "destroy",

 GTK_SIGNAL_FUNC(destroy), &ctrl);

Перейти на страницу:

Все книги серии Полное руководство

Похожие книги

Полное руководство по Microsoft Windows XP
Полное руководство по Microsoft Windows XP

В книге известного американского автора описывается среда ОС Windows XP и принципы ее функционирования, приведен сравнительный анализ Windows XP с предшествующими версиями операционной системы Windows. Рассматриваются вопросы применения и модификации нового интерфейса с целью получения прямого доступа ко всем функциям Windows XP обсуждаются варианты подключения к компьютерным сетям. Несколько разделов посвящены работе с реестром и конфигурационными файлами, мультимедийным функциям и разнообразным системным службам, а также методам решения проблем с программным обеспечением и оборудованием. Особое внимание уделено обеспечению безопасности операционной системы.Издание адресовано пользователям и сетевым администраторам, желающим активно применять возможности операционной системы Windows XP (в том числе и недокументированные).

Джон Поль Мюллер , Питер Нортон

ОС и Сети, интернет / ОС и Сети / Книги по IT