V. La création d'une barre de menus▲
Plusieurs objets graphiques sont nécessaires à la création d'une barre de menus : la barre elle-même, les menus, le panel de chaque menu et les items des menus. Un exemple sera plus parlant :
V-A. Code source▲
class
NotreWindow ...
private
:
....
FXMenuBar *
menu_barre;
FXMenuTitle *
menu_file, *
menu_edition;
FXMenuPane *
file_pan, *
edition_pan;
FXMenuCommand *
item_nouveau, *
item_open, *
item_close, *
item_undo, *
item_copy;
...
}
;
...
menu_barre=
new
FXMenuBar(this
,LAYOUT_TOP|
LAYOUT_LEFT|
LAYOUT_FILL_X,0
,0
,0
,0
,3
,3
,2
,2
,DEFAULT_SPACING,DEFAULT_SPACING);
file_pan =
new
FXMenuPane(this
,0
);
edition_pan=
new
FXMenuPane(this
,0
);
menu_file=
new
FXMenuTitle(menu_barre,"Fichier"
,NULL
,file_pan,0
);
item_nouveau=
new
FXMenuCommand(file_pan,"Nouveau"
,NULL
,this
,ID_NEW,0
);
item_open =
new
FXMenuCommand(file_pan,"Ouvrir"
,NULL
,this
,ID_OPEN,0
);
item_close =
new
FXMenuCommand(file_pan,"Fermer"
,NULL
,this
,ID_CLOSE,0
);
menu_edition=
new
FXMenuTitle(menu_barre,"Edition"
,NULL
,edition_pan,0
);
item_undo =
new
FXMenuCommand(edition_pan,"Annuler"
,NULL
,this
,ID_UNDO,0
);
item_copy =
new
FXMenuCommand(edition_pan,"Copier"
,NULL
,this
,ID_COPY,0
);
...
Le code source n'est pas complet, il ne contient que les morceaux de code qu'il faut rajouter dans les codes précédents. La structure de la fenêtre étant sensiblement la même.
V-B. Explications▲
menu_barre =
new
FXMenuBar(this
,LAYOUT_TOP|
LAYOUT_LEFT|
LAYOUT_FILL_X,0
,0
,0
,0
,3
,3
,2
,2
,DEFAULT_SPACING,DEFAULT_SPACING);
Cette instruction créé une barre de menus. Le premier argument est un pointeur sur l'objet dans lequel la barre devra se trouver, ici, la fenêtre. L'autre argument contient les drapeaux définissant l'aspect de la barre.
file_pan =
new
FXMenuPane(this
,0
);
Cette instruction créé un panel pour un menu déroulant. Cela va donc créer un espace graphique à dérouler. On remarquera la présence de l'argument this, qui pointe sur l'objet contenant le panel, ici, la fenêtre.
menu_file =
new
FXMenuTitle(menu_barre,"Fichier"
,NULL
,file_pan,0
);
Cette instruction crée un menu déroulant dans la barre de menus,
avec un intitulé "Fichier", sans icône, associé au panel file_pan, sans
option particulière.
Il ne reste plus qu'à remplir notre menu avec les items souhaités :
item_nouveau =
new
FXMenuCommand(file_pan,"Nouveau"
,NULL
,this
,ID_NEW,0
);
Nous créons ici un item associé au panel file_pan, intitulé
"Nouveau" . Cet item n'a pas d'icône (NULL). Il enverra ses messages à
this, ici, la fenêtre. Les messages qu'il enverra seront du type
ID_NEW. Le dernier argument correspond aux drapeaux de positionnement
et d'allure de l'item.
Il ne reste plus maintenant qu'à déclarer les message ID_NEW, ID_CLOSE...
dans le type énuméré de la classe NotreWindow, à les déclarer dans la
macro FXDEFMAP et à implémenter les méthodes que vous souhaitez leur
associer.
D'un point de vue esthétique, il est possible de rajouter des séparateurs
entre les items d'un menu :
FXMenuSeparator *
sep1 =
new
FXMenuSeparator(file_pan,0
);