/* La boîte de message (MessageBox) http://www.gtk-fr.org/wakka.php?wiki=LesBoitesDeDialogue gcc `pkg-config --cflags --libs gtk+-2.0` -o 23b 23b.c &&./23b */ #include <stdlib.h> #include <gtk/gtk.h> void OnAboutBtn(GtkWidget *pBtn, gpointer data); void OnQuitBtn(GtkWidget *pBtn, gpointer data); int main(int argc, char **argv) { GtkWidget *pWindow; GtkWidget *pVBox; GtkWidget *pQuitterBtn; GtkWidget *pAboutBtn; gtk_init(&argc,&argv); pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(pWindow), "GtkMessageDialog"); gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200); g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL); pVBox = gtk_vbox_new(TRUE,0); gtk_container_add(GTK_CONTAINER(pWindow),pVBox); pAboutBtn = gtk_button_new_with_label("A propos..."); gtk_box_pack_start(GTK_BOX(pVBox), pAboutBtn, TRUE, FALSE,0); g_signal_connect(G_OBJECT(pAboutBtn), "clicked", G_CALLBACK(OnAboutBtn), (GtkWidget*) pWindow); pQuitterBtn = gtk_button_new_from_stock (GTK_STOCK_QUIT); gtk_box_pack_start(GTK_BOX(pVBox), pQuitterBtn, TRUE, FALSE, 0); g_signal_connect(G_OBJECT(pQuitterBtn), "clicked", G_CALLBACK(OnQuitBtn), (GtkWidget*) pWindow); gtk_widget_show_all(pWindow); gtk_main(); return EXIT_SUCCESS; } void OnAboutBtn(GtkWidget *pBtn, gpointer data) { GtkWidget *pAbout; gchar *sSite = "http://www.gtk-fr.org"; /* Creation de la boite de message */ /* Type : Information -> GTK_MESSAGE_INFO */ /* Bouton : 1 OK -> GTK_BUTTONS_OK */ pAbout = gtk_message_dialog_new (GTK_WINDOW(data), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Cours GTK+ 2.0\n%s", sSite); /* Affichage de la boite de message */ gtk_dialog_run(GTK_DIALOG(pAbout)); /* Destruction de la boite de message */ gtk_widget_destroy(pAbout); } void OnQuitBtn(GtkWidget* widget, gpointer data) { GtkWidget *pQuestion; /* Creation de la boite de message */ /* Type : Question -> GTK_MESSAGE_QUESTION */ /* Boutons : 1 OUI, 1 NON -> GTK_BUTTONS_YES_NO */ pQuestion = gtk_message_dialog_new (GTK_WINDOW(data), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Voulez vous vraiment\nquitter ce programme?"); /* Affichage et attente d une reponse */ switch(gtk_dialog_run(GTK_DIALOG(pQuestion))) { case GTK_RESPONSE_YES: /* OUI -> on quitte l application */ gtk_main_quit(); break; case GTK_RESPONSE_NO: /* NON -> on detruit la boite de message */ gtk_widget_destroy(pQuestion); break; } }