IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

Gtk_Menu, menu de premier, second, voire n-niveau


Sujet :

GTK+ avec C & C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Points : 36
    Points
    36
    Par défaut Gtk_Menu, menu de premier, second, voire n-niveau
    Bonjour,

    Je souhaite réaliser une fenêtre avec une barre de menu, des sous-menus et un troisième niveau de sous-menu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    #include <stdlib.h>
    #include <gtk/gtk.h>
     
    gboolean Callback(GtkWidget *menu_entry, gchar *texte)
    {
      printf("%s\n", texte);
     
      return TRUE;
    }
     
    int main (int argc, char *argv[])
    {
      GtkWidget *Fenetre;
      GtkWidget *Barre_Menu;
      GtkWidget *Menu;
      GtkWidget *Elt_Menu;
     
      /* Initialisation GTK+ */
      gtk_init (&argc, &argv);
     
      /* Creation Fenetre Principale */
      Fenetre = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      g_signal_connect(G_OBJECT(Fenetre), "destroy", gtk_main_quit, NULL);
      g_signal_connect(G_OBJECT(Fenetre), "delete_event", gtk_main_quit, NULL);
     
      /* Creation de la barre de menu */
      Barre_Menu = gtk_menu_bar_new();
      gtk_container_add(GTK_CONTAINER(Fenetre), Barre_Menu);
     
      /* Creation et attachement de la premiere entree */
      Elt_Menu = gtk_menu_item_new_with_label("Élément 1");
      gtk_menu_bar_append(GTK_MENU_BAR(Barre_Menu), Elt_Menu);
      g_signal_connect(G_OBJECT(Elt_Menu), "activate", G_CALLBACK(Callback), "Élément 1");
        /* Creation du menu associé à l'entree 1 */
        Menu = gtk_menu_new();
        gtk_menu_item_set_submenu(GTK_MENU_ITEM(Elt_Menu), Menu);
        /* Élément 1-1 */
        Elt_Menu = gtk_menu_item_new_with_label("Élément 1-1");
        gtk_menu_append(GTK_MENU(Menu), Elt_Menu);
        /* Élément 1-2 */
        Elt_Menu = gtk_menu_item_new_with_label("Élément 1-2");
        gtk_menu_append(GTK_MENU(Menu), Elt_Menu);
        /* Un séparateur */
        Elt_Menu = gtk_menu_item_new();
        gtk_menu_append(GTK_MENU(Menu), Elt_Menu);
        /* ÉLément 1-3 - Quitter */
        Elt_Menu = gtk_menu_item_new_with_label("Élément 1-3 - Quitter");
        gtk_menu_append(GTK_MENU(Menu), Elt_Menu);
        g_signal_connect(G_OBJECT(Elt_Menu), "destroy", G_CALLBACK(gtk_main_quit), NULL);
     
      /* Creation et attachement de la seconde entree */
      Elt_Menu = gtk_menu_item_new_with_label("Élément 2");
      gtk_menu_bar_append(GTK_MENU_BAR(Barre_Menu), Elt_Menu);
      g_signal_connect(G_OBJECT(Elt_Menu), "activate", G_CALLBACK(Callback), "Élément 2");
      /* Creation du menu associé à l'entree 2 */
        Menu = gtk_menu_new();
        gtk_menu_item_set_submenu(GTK_MENU_ITEM(Elt_Menu), Menu);
        /* Élément 2-2 */
        Elt_Menu = gtk_menu_item_new_with_label("Élément 2-2");
        gtk_menu_append(GTK_MENU(Menu), Elt_Menu);
        /* Élément 2-1 */
        Elt_Menu = gtk_menu_item_new_with_label("Élément 2-1");
        gtk_menu_append(GTK_MENU(Menu), Elt_Menu);
        /* Creation du menu associé à l'entrée 2-1 */
          Menu = gtk_menu_new();
          gtk_menu_item_set_submenu(GTK_MENU_ITEM(Elt_Menu), Menu);
          /* Élément 2-1-1 */
          Elt_Menu = gtk_menu_item_new_with_label("Élément 2-1-1");
          gtk_menu_append(GTK_MENU(Menu), Elt_Menu);
      /* Creation et attachement de la troisième entree */
      Elt_Menu = gtk_menu_item_new_with_label("Élément 3");
      gtk_menu_bar_append(GTK_MENU_BAR(Barre_Menu), Elt_Menu);
      g_signal_connect(G_OBJECT(Elt_Menu), "activate", G_CALLBACK(Callback), "Élément 3");
      gtk_menu_item_right_justify(GTK_MENU_ITEM(Elt_Menu));
     
      /* Boucle ppale */
      gtk_widget_show_all (Fenetre);
      gtk_main ();
      return 0;
    }
    Comment faire pour que "Élément 2-2" soit en-dessous d'"Élément 2-1" et soit considéré comme de même niveau ?

  2. #2
    Modérateur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    1 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 395
    Points : 2 002
    Points
    2 002
    Par défaut
    Et si tu utilisais plutôt Glade et GtkUIManager ou GtkBuilder ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par liberforce Voir le message
    Et si tu utilisais plutôt Glade et GtkUIManager ou GtkBuilder ?
    GtkUIManager ne me permet pas de personnaliser les images que je souhaite associer aux éléments du menu. Je ne me suis pas encore penchée sur GtkBuilder.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Salut,

    tiens regarde ce bout de code c'est une application que j'ai coder ou il y a justement des sous-menu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    pApp->menu.pMenu = gtk_menu_new(); /* menu principal */
    pApp->menu.pMenu2 = gtk_menu_new(); /* sous-menu du menu principal */
     
    /* creation d'un element vide pour afficher une liste vide */
    pApp->menu.pMenuItem = gtk_radio_menu_item_new_with_label(NULL, "vide");
    pApp->menu.pList = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(pApp->menu.pMenuItem));
     
    pApp->menu.pMenuItem = gtk_radio_menu_item_new_with_label(pApp->menu.pList, "C°->F°");
    	g_signal_connect(G_OBJECT(pApp->menu.pMenuItem),"activate",G_CALLBACK(convertChoice), pApp);
    gtk_menu_shell_append(GTK_MENU_SHELL(pApp->menu.pMenu2), pApp->menu.pMenuItem);
    pApp->menu.pList = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(pApp->menu.pMenuItem));
     
    pApp->menu.pMenuItem = gtk_radio_menu_item_new_with_label(pApp->menu.pList, "F°->C°");
    	g_signal_connect(G_OBJECT(pApp->menu.pMenuItem),"activate",G_CALLBACK(convertChoice), pApp);
    gtk_menu_shell_append(GTK_MENU_SHELL(pApp->menu.pMenu2), pApp->menu.pMenuItem);
    	pApp->menu.pList = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(pApp->menu.pMenuItem));
     
    pApp->menu.pMenuItem = gtk_radio_menu_item_new_with_label(pApp->menu.pList, "C°->K°");
    gtk_menu_shell_append(GTK_MENU_SHELL(pApp->menu.pMenu2), pApp->menu.pMenuItem);
    	g_signal_connect(G_OBJECT(pApp->menu.pMenuItem),"activate",G_CALLBACK(convertChoice), pApp);
    pApp->menu.pList = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(pApp->menu.pMenuItem));
     
    pApp->menu.pMenuItem = gtk_radio_menu_item_new_with_label(pApp->menu.pList, "K°->C°");
    gtk_menu_shell_append(GTK_MENU_SHELL(pApp->menu.pMenu2), pApp->menu.pMenuItem);
    	g_signal_connect(G_OBJECT(pApp->menu.pMenuItem),"activate",G_CALLBACK(convertChoice), pApp);
    pApp->menu.pList = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(pApp->menu.pMenuItem));
     
    pApp->menu.pMenuItem = gtk_radio_menu_item_new_with_label(pApp->menu.pList, "F°->K°");
    gtk_menu_shell_append(GTK_MENU_SHELL(pApp->menu.pMenu2), pApp->menu.pMenuItem);
    	g_signal_connect(G_OBJECT(pApp->menu.pMenuItem),"activate",G_CALLBACK(convertChoice), pApp);
    pApp->menu.pList = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(pApp->menu.pMenuItem));
     
    pApp->menu.pMenuItem = gtk_radio_menu_item_new_with_label(pApp->menu.pList, "K°->F°");
    gtk_menu_shell_append(GTK_MENU_SHELL(pApp->menu.pMenu2), pApp->menu.pMenuItem);
    	g_signal_connect(G_OBJECT(pApp->menu.pMenuItem),"activate",G_CALLBACK(convertChoice), pApp);
    pApp->menu.pList = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(pApp->menu.pMenuItem));
     
    pApp->menu.pMenuItem = gtk_menu_item_new_with_label("Temperature");
     
    gtk_menu_item_set_submenu(GTK_MENU_ITEM(pApp->menu.pMenuItem), pApp->menu.pMenu2);
    gtk_menu_shell_append(GTK_MENU_SHELL(pApp->menu.pMenu), pApp->menu.pMenuItem);
     
    pApp->menu.pMenuItem = gtk_menu_item_new_with_label("Conversion");
    gtk_menu_item_set_submenu(GTK_MENU_ITEM(pApp->menu.pMenuItem), pApp->menu.pMenu);

  5. #5
    Nouveau membre du Club
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par double_ZerO Voir le message
    Salut,

    tiens regarde ce bout de code c'est une application que j'ai coder ou il y a justement des sous-menu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pApp->menu.pMenu = gtk_menu_new(); /* menu principal */
    pApp->menu.pMenu2 = gtk_menu_new(); /* sous-menu du menu principal */
    Certes oui, mais que sont menu et pApp ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Points : 36
    Points
    36
    Par défaut
    Bon, histoire de me simplifier la tâche, je tente la création des éléments des différents menus... Sauf que ça ne fonctionne pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    GtkWidget CreerElt(gchar *Label, GdkPixbuf Pix)
    {
      GtkWidget *Elt;
      GtkWidget *Image;
      Elt = gtk_image_menu_item_new_with_label(Label);
      Image = gtk_image_new_from_pixbuf(Pix);
      gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(Elt), GTK_WIDGET(Image));
      return GTK_WIDGET(Elt);
    }
    Le compilateur me répond que, je cite : "erreur: parameter 2 (‘Pix’) has incomplete type" pour la déclaration, que "erreur: incompatible types in return" pour le retour et également que "attention : control reaches end of non-void function" alors qu'il me semble ne pas avoir oublié de point-virgule... Y'a-t-il quelque chose qui m'a échappé ?

    Edit :
    Au temps pour moi, avec GtkWidget *CreerElt plutôt que GtkWidget CreerElt, il ne reste plus que la première erreur...

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 259
    Points : 1 633
    Points
    1 633
    Par défaut
    Un GdkPixbuf * au lieu de GtkPixbuf serait bienvenu aussi.

  8. #8
    Nouveau membre du Club
    Profil pro
    Recette MOE/MOA
    Inscrit en
    Mai 2009
    Messages
    60
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Recette MOE/MOA

    Informations forums :
    Inscription : Mai 2009
    Messages : 60
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par teuf13 Voir le message
    Un GdkPixbuf * au lieu de GtkPixbuf serait bienvenu aussi.
    Merci. Ces histoires de pointeurs, quand on a été formé sur Java, c'est pas un réflexe !

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2014, 13h27
  2. Affichage menu en premier plan
    Par imenfatma dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 08/12/2012, 16h17
  3. [AJAX] DIV menu au premier plan : bug
    Par poitierjohan dans le forum AJAX
    Réponses: 2
    Dernier message: 22/06/2010, 10h43
  4. Menu CSS vertical, problème au troisième niveau du menu
    Par mouna201 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 06/11/2008, 23h09
  5. Pb Hook restituer menu et premier clic
    Par reptils dans le forum Windows
    Réponses: 1
    Dernier message: 24/08/2006, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo