Posté(e) le 17 septembre 200519 a hop!! Je veux faire un menu en c++ et je découvre ce langage, avant je faisais de l'ADA(pas tres puissant) alors ce menu comporte plusieurs choix et je voudrais que lorsque j'appuie sur les touches du pad fleches j'ai un curseur qui bouge, il me faudrait donc savoir quoi ecrire : de genre : (si fleche bas appuyée) goto...... merci
Posté(e) le 17 septembre 200519 a Si tu fais ton menu, une fois qu'il sera ouvert je crois qu'en appuyant sur une flèche il va automatiquement se déplacer dedans sans avoir à faire une programmation spéciale. Seulement n'ayant pas encore fait de C++ c'est à vérifier.
Posté(e) le 17 septembre 200519 a Salut, Ton interface, tu l'as créé avec quoi ? C'est du Win32 ? Et ton menu comment est-ce que tu l'as intégré dans ta fenêtre ? Si c'est du Win32, tu crées ton menu dans un fichier ressource. Exemple : 501 MENU BEGIN POPUP "&Fichier" BEGIN MENUITEM "&Ouvrir", IDM_OPEN MENUITEM "&Sauvegarder", IDM_FILESAVE MENUITEM "Sauvegarder sous...", IDM_FILESAVEAS MENUITEM SEPARATOR MENUITEM "&Imprimer...", IDM_FILEPRINT MENUITEM "Mise en page...", IDM_FILEPAGESETUP MENUITEM "Options d'impression...", IDM_FILEPRINTSETUP MENUITEM SEPARATOR MENUITEM "Q&uitter", IDM_FILEEXIT END POPUP "&Aide" BEGIN MENUITEM "&Contenu\tF1", IDM_HELPCONTENTS MENUITEM "&Rechercher", IDM_HELPSEARCH MENUITEM "&Aide", IDM_HELPHELP MENUITEM SEPARATOR MENUITEM "&A propos...", IDM_HELPABOUT END END et ensuite tu l'intègres à ta fenêtre, avec : #define ID_MENU 501 (dans main.h, par exemple) // Dans la fonction où tu crée la fenetre 'hwnd' qui va recevoir le menu menu = LoadMenu(hThisInstance, MAKEINTRESOURCE(ID_MENU)); SetMenu(hwnd, menu); Si tu fais comma ça, tu pourras automatiquement te déplacer dans ton menu avec les flêches. A+.
Posté(e) le 17 septembre 200519 a Je pense plutôt qu'il parle d'un menu textuel en C++ (application console). Les codes des touches sont : gauche : 75 droite : 77 haut : 72 bas : 80 Il suffit d'une boucle qui lit le caractère frappé au clavier, compare avec ces codes, déplace le curseur, et appelle la fonction adéquate si l'utilisateur appuie sur Entrée pour valider son choix.
Posté(e) le 17 septembre 200519 a Auteur effectivement sentinel c'est plutot ça, as tu un petit exemple?? je vois pas trop la syntaxe if ("touche"=75) { goto balise; }
Posté(e) le 17 septembre 200519 a Auteur ah ba flute quand je programmais en ada (iut info a nantes) on utilisais beaucoup les goto ça devait etre parce que nous n'avions pas le choix tellement le langage n'est pas tres puissant, je sais pas. je pensais faire 4 affichages différents vu que j'ai 4 chois dans mon menu et mettre des goto pour changer de choix. une solution alternative simple a suggerer?? c'est vraiment pour un prog basique alors je veux pas un truc compliqué merci
Posté(e) le 17 septembre 200519 a P'tain ça faisait longtemps que j'avais pas vu un goto, ça me rappelle la prog en Basic En C vaut mieux utiliser des procédures ou des fonctions. edit : bah vu que tu commences j'te mets un exemple : // une procédure void afficherMessage(const char *message) { printf("%s", message); }; // une fonction (la différence est que la fonction retourne un résultat) int somme(int x, int y) { return x+y; }; int main() { afficherMessage("Coucou!!"); // affiche Coucou!! int entier = somme(2,2); // entier reçoit 4 return 0; } Modifié le 17 septembre 200519 a par astero-H
Posté(e) le 17 septembre 200519 a Moi j'avais fait une fonction qui fesait toute seule comme une grande la gestion d'un menu, mais pas exactement comme tu le souhaite. Enfin on ne sait jamais, si ça peut te servir... //-----------------------------------------------------------------------------| // | // console_menu.h Par Captain H@dock | // | // Crée le 02/08/2005 Dernière modification le 02/08/2005 | // | // Utilitée : Permet la création de menus en mode console. | // | //-----------------------------------------------------------------------------| // Exemple d'implémentation | /* int nb = 6; int ret_menu; char MENU[] = "Menu1\0Menu2\0Menu3\0Menu4\0Menu5\0Menu6"; ret_menu = makemenu(nb, MENU); */ //-----------------------------------------------------------------------------| //Déclaration des prototypes. int makemenu(int nb_menu, char *menu_nom); //-----------------------------------------------------------------------------| // make_menu fonction | // | // Paramètre en entrée : int + Char* (pointeur sur une chaîne de charactères)| // Valeur entière du nombre de menus. | // Pointeur sur la chaîne contenant les noms de menu séparés par des '\0' | // Paramètre en sortie : int | // Le numéro du menu choisit par l'utilisateur. | // | // La fonction se charge de parcourir menu par menu la chaîne et de renvoyer | // la valeur du choix comprise entre 1 et le int en entrée. | // Paramètre en sortie : Aucun | //-----------------------------------------------------------------------------| int makemenu(int nb_menu, char *menu_nom) { char *makemenu_buffer; //Pointeur sur le buffer de texte. int i, j, menu, choix; //Variables compteurs et de retour. char *cur_menu; //Pointeur sur le nom du menu courant. char cur_char; //Charactère tampon. cur_menu = new char[255]; //Alocation mémoire. menu = 1; //Initialisation des variables compteur. i=0; //Premier menu, début de chaîne de menu j=0; //courant et de menu totale. while (menu <= nb_menu) //Tant qu'il reste des menu à faire. { if (i == 0) //Si nouveau menu. { sprintf(cur_menu, "%d - ", menu); //Inscrire son numéro dans le courant. cur_char = *(cur_menu + i); while (cur_char != '\0') //Pointer sur le 0 terminal du courant. { i++; cur_char = *(cur_menu + i); } } if (i > 0) //Si menu déja commencé. { cur_char = *(menu_nom + j); //Recopier la chaîne totale dans le while (cur_char != '\0') //courant tant qu'on ne rencontre pas { //un '\0'. *(cur_menu + i) = cur_char; i++; j++; cur_char = *(menu_nom + j); } *(cur_menu + i) = '.'; //Ensuite mettre un point. i++; *(cur_menu + i) = '\n'; //Un retour à la ligne. i++; *(cur_menu + i) = '\0'; //Et fermer la chaîne. j++; printf(cur_menu); //L'écrire. i = 0; //Pointer sur le premier charactère menu++; //du courant et compter un menu de plus. } } delete cur_menu; //Désalocation mémoire. makemenu_buffer = new char[255]; //Alocation mémoire. choix = 0; //Initialiser le choix hors interval. while (choix < 1 || choix > nb_menu)//Tant que choix hors interval. { sprintf(makemenu_buffer, "Faites votre choix (%d-%d): \n", 1, nb_menu); printf(makemenu_buffer); //Inviter l'utilisateur à l'entrer. cin >> choix; //Saisie de la valeur. if (choix < 1 || choix > nb_menu) //Si choix hors interval. { sprintf(makemenu_buffer, "Choix %d Invalide.\n", choix); printf(makemenu_buffer); //L'avertir. } } sprintf(makemenu_buffer, "Choix : %d.\n", choix);//Sortie de boucle donc printf(makemenu_buffer); //choix valide affiché. delete makemenu_buffer; //Désalocation mémoire. return choix; //Renvoyer la valeur saisie. } En gros, la fonction s'occupe de l'affichage et de la gestion du choix de l'utilisateur et te renvoit un entier correspondant au choix. Donc si tu veux faire un menu à deux choix, il faut écrire : int nb = 2; //Deux choix (1 ou 2) int ret_menu; char MENU[] = "Nom du menu 1\0Nom du menu 2"; ret_menu = makemenu(nb, MENU); //Appel de la fonction menu. //traitement du résultat if (ret_menu == 1) { //Il a choisit 1. } if (ret_menu == 2) { //Il a choisit 2. } [bien penser à copier tout le premier code en haut de ton fichier. (ou dans un Header)] Si il y a des fautes, ne pas hésiter à me les signaler... [et surtout, jamais de GOTO, les spaggetis, c'est le fouillis... )
Posté(e) le 18 septembre 200519 a Auteur merci à vous, je vais étudier les solutions @ plus tard si j'ai un problème
Posté(e) le 20 septembre 200519 a Sans goto surtout... on ne programme JAMAIs avec des goto ! à propos de ce goto : http://www.acm.org/classics/oct95/ par Dijkstra lui même
Posté(e) le 20 septembre 200519 a Petite remarque sur le goto: il est encore très utilisé en C mais dans le cas très particulier des "exceptions". En effet, le C ne gère pas les exceptions, contrairement au C++. Donc pour avoir un mécanisme assez proche, on utilise des goto avec un label qui correspond au catch d'une exception en C++. Et pour une fois cela facilite considérablement la lecture du code. C'est d'ailleurs assez utilisé dans Linux.
Posté(e) le 21 septembre 200519 a 'tain y'a des goto en C ??? Terrible, je savais même pas. Ca doit etre un sacré fossile mal conservé...
Posté(e) le 22 septembre 200519 a Petite remarque sur le goto: il est encore très utilisé en C mais dans le cas très particulier des "exceptions". En effet, le C ne gère pas les exceptions, contrairement au C++. Donc pour avoir un mécanisme assez proche, on utilise des goto avec un label qui correspond au catch d'une exception en C++. Et pour une fois cela facilite considérablement la lecture du code. C'est d'ailleurs assez utilisé dans Linux. 'tain y'a des goto en C ??? Terrible, je savais même pas. Ca doit etre un sacré fossile mal conservé...
Posté(e) le 22 septembre 200519 a Bah c'était juste un vieu troll, pas la peine de relever Par ailleurs, le C n'a pas grand chose à prouver. Il a déjà montré de quoi il est capable
Posté(e) le 24 septembre 200519 a Ca doit etre un sacré fossile mal conservé... "Ca" désignait le goto...
Posté(e) le 26 septembre 200519 a Un prof m'avait dis qu'on avait le droit a un seul goto par an :) donc Tospinono tu n'y a plus droit avant 2006 EDIT: idem pour le blah: ... break bla; c'est du sucre syntaxique pour enlever le goto mais c'est pareil Modifié le 26 septembre 200519 a par savory
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.