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 ?