/* Menu http://www.gtk-fr.org/wakka.php?wiki=LesMenus gcc `pkg-config --cflags --libs gtk+-2.0` -o 25a 25a.c &&./25a */ #include <stdlib.h> #include <gtk/gtk.h> void OnQuitter(GtkWidget* widget, gpointer data); void OnAbout(GtkWidget* widget, gpointer data); int main(int argc, char **argv) { GtkWidget *pWindow; GtkWidget *pVBox; GtkWidget *pMenuBar; GtkWidget *pMenu; GtkWidget *pMenuItem; gtk_init(&argc, &argv); /* Creation de la fenetre */ pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(pWindow), "GtkMenu"); gtk_window_set_default_size(GTK_WINDOW(pWindow), 320, 200); g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL); /* Creation de la GtkVBox */ pVBox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(pWindow), pVBox); /**** Creation du menu ****/ /* ETAPE 1 */ pMenuBar = gtk_menu_bar_new(); /** Premier sous-menu **/ /* ETAPE 2 */ pMenu = gtk_menu_new(); /* ETAPE 3 */ pMenuItem = gtk_menu_item_new_with_label("Nouveau"); gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); pMenuItem = gtk_menu_item_new_with_label("Ouvrir"); gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); pMenuItem = gtk_menu_item_new_with_label("Enregistrer"); gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); pMenuItem = gtk_menu_item_new_with_label("Fermer"); gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); pMenuItem = gtk_menu_item_new_with_label("Quitter"); g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(OnQuitter), (GtkWidget*) pWindow); gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); /* ETAPE 4 */ pMenuItem = gtk_menu_item_new_with_label("Fichier"); /* ETAPE 5 */ gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); /* ETAPE 6 */ gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); /** Second sous-menu **/ /* ETAPE 2 */ pMenu = gtk_menu_new(); /* ETAPE 3 */ pMenuItem = gtk_menu_item_new_with_label("A propos de..."); g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(OnAbout), (GtkWidget*) pWindow); gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); /* ETAPE 4 */ pMenuItem = gtk_menu_item_new_with_label("?"); /* ETAPE 5 */ gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); /* ETAPE 6 */ gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); /* Ajout du menu a la fenetre */ gtk_box_pack_start(GTK_BOX(pVBox), pMenuBar, FALSE, FALSE, 0); gtk_widget_show_all(pWindow); gtk_main(); return EXIT_SUCCESS; } void OnQuitter(GtkWidget* widget, gpointer data) { GtkWidget *pQuestion; pQuestion = gtk_message_dialog_new(GTK_WINDOW(data), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Voulez vous vraiment\n" "quitter le programme?"); switch(gtk_dialog_run(GTK_DIALOG(pQuestion))) { case GTK_RESPONSE_YES: gtk_main_quit(); break; case GTK_RESPONSE_NONE: case GTK_RESPONSE_NO: gtk_widget_destroy(pQuestion); break; } } void OnAbout(GtkWidget* widget, gpointer data) { GtkWidget *pAbout; pAbout = gtk_message_dialog_new (GTK_WINDOW(data), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Cours GTK+ 2.0\n" "http://www.gtk-fr.org"); gtk_dialog_run(GTK_DIALOG(pAbout)); gtk_widget_destroy(pAbout); }