mikepro60
Messages postés14Date d'inscriptionsamedi 17 août 2019StatutMembreDernière intervention 9 août 2020
-
9 août 2020 à 23:17
Bonsoir tout le monde, je fais actuellement une formation en langage c et je programme des applications au moyen de la bibliothèque gtk+. J'ai réalisé un programme qui affiche un menu sauf qu'il y'a des erreurs que je n'arrive pas à corriger. Quelqu'un peut il m'aider ? Je vous envoi le code source.
#include <stdlib.h>
#include <gtk/gtk.h>
void OnQuitter(gpointer data, guint callback_action, GtkWidget*widget);
void OnAbout(gpointer data, guint callback_action, GtkWidget*widget);
// Définition des éléments du menu
static GtkItemFactoryEntry MenuItem[] = {
{"/_Fichier",NULL,NULL,0,"<Branch>"},
{"/Fichier/_Nouveau","<ctrl>N",NULL,0,"<StockItem>", GTK_STOCK_NEW},
{"/Fichier/_Ouvrir","<ctrl>O",NULL,0,"<StockItem>", GTK_STOCK_OPEN},
{"/Fichier/Enregi_strer", "<ctrl>S",NULL,0,"<StockItem>", GTK_STOCK_SAVE},
{"/Fichier/_Fermer","<ctrl>F",NULL,0,"<StockItem>", GTK_STOCK_CLOSE},
{"/Fichier/Sep1",NULL,NULL,0,"<Separator>"},
{"/Fichier/_Quitter",NULL,OnQuitter,1,"<StockItem>", GTK_STOCK_QUIT},
{"/_?",NULL,NULL,0, "<Branch>"},
{"/?/_A propos de","<ctrl>A",OnAbout,1,"<StockItem>", GTK_STOCK_HELP}
};
// Nombre d'éléments du menu
static gint iNbMenuItem = sizeof(MenuItem)/sizeof(MenuItem[0]);
int main(int argc, char**argv)
{
GtkWidget*pWindow;
GtkWidget*pVbox;
GtkWidget*pMenuBar;
GtkItemFactory*pItemFactory;
GtkAccelGroup*pAccel;
gtk_init(&argc,&argv);
// Création de la fenêtre
pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(pWindow), "Menu rapide");
gtk_window_set_default_size(GTK_WINDOW(pWindow), 320,200);
g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL);
// Création de la GtkVbox
pVbox = gtk_vbox_new(FALSE,0);
gtk_container_add(GTK_CONTAINER(pWindow), pVbox);
// Création de la table d'acceleration
pAccel = gtk_accel_group_new();
/* Création du menu */
pItemFactory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", pAccel);
// Récupération des éléments du menu
gtk_item_factory_create_items(pItemFactory, iNbMenuItem, MenuItem, (GtkWidget*)pWindow);
// Récupération du widget pour l'affichage du menu
pMenuBar = gtk_item_factory_get_widget(pItemFactory, "<main>");
// Ajout du menu en haut de la fenêtre
gtk_box_pack_start(GTK_BOX(pVbox), pMenuBar, FALSE,FALSE,0);
// Association des raccourcis avec la fenêtre
gtk_window_add_accel_group(GTK_WINDOW(pWindow), pAccel);
/* Création d'un second menu de type GTK_TYPE_OPTION_MENU */
pItemFactory = gtk_item_factory_new(GTK_TYPE_OPTION_MENU, "<main>", NULL);
// Récupération des éléments du menu
gtk_item_factory_create_items(pItemFactory, iNbMenuItem, MenuItem, (GtkWidget*)pWindow);
// Récupération du widget pour l'affichage du menu
pMenuBar = gtk_item_factory_get_widget(pItemFactory, "<main>");
// Ajout du menu en bas de la fenêtre
gtk_box_pack_end(GTK_BOX(pVbox), pMenuBar, FALSE,FALSE,0);
gtk_widget_show_all(pWindow);
gtk_main();
return EXIT_SUCCESS;
}
void OnQuitter(gpointer data, guint callback_action, GtkWidget*widget)
{
GtkWidget*pQuestion;
pQuestion = gtk_message_dialog_new(GTK_WINDOW(data),GTK_DIALOG_MODAL,GTK_MESSAGE_QUESTION,
GTK_BUTTONS_YES_NO, "Voulez-vous quitter\n 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(gpointer data, guint callback_action, GtkWidget*widget)
{
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);
}