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ée 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ée 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 messages 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);


