Aller au contenu

c++ : reconnaissance des touches "fleche"


Tospinono

Messages recommandés

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

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

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

ah ba flute :pleure:

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 :pleure:

Lien vers le commentaire
Partager sur d’autres sites

P'tain ça faisait longtemps que j'avais pas vu un goto, ça me rappelle la prog en Basic :pleure:

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;
}

:pleure:

Lien vers le commentaire
Partager sur d’autres sites

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... :francais: )

Lien vers le commentaire
Partager sur d’autres sites

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

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é... :mdr2:

:zarb:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...