Tospinono Posté(e) le 17 septembre 2005 Partager Posté(e) le 17 septembre 2005 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
LePhasme Posté(e) le 17 septembre 2005 Partager Posté(e) le 17 septembre 2005 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
MissZaza Posté(e) le 17 septembre 2005 Partager Posté(e) le 17 septembre 2005 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+. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 17 septembre 2005 Partager Posté(e) le 17 septembre 2005 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tospinono Posté(e) le 17 septembre 2005 Auteur Partager Posté(e) le 17 septembre 2005 effectivement sentinel c'est plutot ça, as tu un petit exemple?? je vois pas trop la syntaxe if ("touche"=75) { goto balise; } Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tospinono Posté(e) le 17 septembre 2005 Auteur Partager Posté(e) le 17 septembre 2005 sans les {} sorry lol Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sentinel Posté(e) le 17 septembre 2005 Partager Posté(e) le 17 septembre 2005 Sans goto surtout... on ne programme JAMAIs avec des goto ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tospinono Posté(e) le 17 septembre 2005 Auteur Partager Posté(e) le 17 septembre 2005 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
astero-H Posté(e) le 17 septembre 2005 Partager Posté(e) le 17 septembre 2005 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; } Lien vers le commentaire Partager sur d’autres sites More sharing options...
Captain Hadock Posté(e) le 17 septembre 2005 Partager Posté(e) le 17 septembre 2005 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... ) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Tospinono Posté(e) le 18 septembre 2005 Auteur Partager Posté(e) le 18 septembre 2005 merci à vous, je vais étudier les solutions @ plus tard si j'ai un problème Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 20 septembre 2005 Partager Posté(e) le 20 septembre 2005 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
oposs Posté(e) le 20 septembre 2005 Partager Posté(e) le 20 septembre 2005 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
njoyard Posté(e) le 21 septembre 2005 Partager Posté(e) le 21 septembre 2005 'tain y'a des goto en C ??? Terrible, je savais même pas. Ca doit etre un sacré fossile mal conservé... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Captain Hadock Posté(e) le 22 septembre 2005 Partager Posté(e) le 22 septembre 2005 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é... Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 22 septembre 2005 Partager Posté(e) le 22 septembre 2005 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Captain Hadock Posté(e) le 23 septembre 2005 Partager Posté(e) le 23 septembre 2005 C clair... ===============>[ ] Lien vers le commentaire Partager sur d’autres sites More sharing options...
njoyard Posté(e) le 24 septembre 2005 Partager Posté(e) le 24 septembre 2005 Ca doit etre un sacré fossile mal conservé... "Ca" désignait le goto... Lien vers le commentaire Partager sur d’autres sites More sharing options...
savory Posté(e) le 26 septembre 2005 Partager Posté(e) le 26 septembre 2005 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Captain Hadock Posté(e) le 28 septembre 2005 Partager Posté(e) le 28 septembre 2005 "Ca" désignait le goto... On avait bien compris.... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.