A voir également:
- Menu deroulant en C
- Menu déroulant excel - Guide
- Excel menu déroulant en cascade - Guide
- Menu déroulant google sheet - Accueil - Guide bureautique
- Windows 11 menu démarrer classique - Guide
- Canon quick menu - Télécharger - Utilitaires
2 réponses
Salut, je te conseille d'utiliser les routines de dessin fournies avec ton compilateur.
tu peux utiliser des structures pour hierarchiser ton menu, des structures dans des structures avec des pointeurs vers des fonctions quand tu est dans un element du menu qui lance une tache.
tu met les déclartions de structures dans un fichier header.
je te conseille d'essayer un truc tout simple au depart apres tu peut enrichir ton menu en inversant les couleurs lors de la selection, etc...
bonne chance, c'est long et pénible mais quand c'est fait c'est fait !
tu peux utiliser des structures pour hierarchiser ton menu, des structures dans des structures avec des pointeurs vers des fonctions quand tu est dans un element du menu qui lance une tache.
tu met les déclartions de structures dans un fichier header.
je te conseille d'essayer un truc tout simple au depart apres tu peut enrichir ton menu en inversant les couleurs lors de la selection, etc...
bonne chance, c'est long et pénible mais quand c'est fait c'est fait !
personnellement j'utiliserais une structure :
struct MenuItem {
char* name; // nom de l'entrée du menu
bool open; // afficher les sous-menus ?
MenuItem* subMenu; // liste chainée du sous-menu
MenuItem* nextMenuItem; // élément suivant dans la liste
};
après tu créer une liste chainée pour le premier niveau du menu
puis des sous listes pour les niveaux inférieurs et ainsi de suite:
MenuItem* menu --> [#] --> [#] --> [#] --> NULL
|
v
[#] --> NULL
|
v
[#] --> NULL
|
v
NULL
Pour afficher le menu, tu parcours ta liste, en parcourant aussi les sous listes si le flag open est vrai. à chaque passage à un niveau inférieur tu peux incrémenter une valeur indiquant l'indentation à utiliser pour afficher le nom de l'entrée traitée. Je verais bien une fonction récursive pour réaliser cette tâche.
D'un point de vue de l'interface, fouine dans tes librairies tu trouveras bien quelque chose d'intéressant. Ou bien si tu es un barbare, tu peux te faire ta propre librairie d'affichage de menu en utilisant les caractères d'échappement ( e[2j , ou quelque chose dans le genre, je ne me rappelle plus très bien)
enjoy !
Yoann
struct MenuItem {
char* name; // nom de l'entrée du menu
bool open; // afficher les sous-menus ?
MenuItem* subMenu; // liste chainée du sous-menu
MenuItem* nextMenuItem; // élément suivant dans la liste
};
après tu créer une liste chainée pour le premier niveau du menu
puis des sous listes pour les niveaux inférieurs et ainsi de suite:
MenuItem* menu --> [#] --> [#] --> [#] --> NULL
|
v
[#] --> NULL
|
v
[#] --> NULL
|
v
NULL
Pour afficher le menu, tu parcours ta liste, en parcourant aussi les sous listes si le flag open est vrai. à chaque passage à un niveau inférieur tu peux incrémenter une valeur indiquant l'indentation à utiliser pour afficher le nom de l'entrée traitée. Je verais bien une fonction récursive pour réaliser cette tâche.
D'un point de vue de l'interface, fouine dans tes librairies tu trouveras bien quelque chose d'intéressant. Ou bien si tu es un barbare, tu peux te faire ta propre librairie d'affichage de menu en utilisant les caractères d'échappement ( e[2j , ou quelque chose dans le genre, je ne me rappelle plus très bien)
enjoy !
Yoann