Gestion d'un joystique avec l'apiwnd

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 812 fois - Téléchargée 19 fois

Contenu du snippet

Salut les amis ;-),
Il y a une semaine je cherchais comment faire pour géré un joystick ( hors focus ) et grâce à la source de T_Mehdi ( http://www.cppfrance.com/code.aspx?ID=30854 ) et à msdn.

Voila je vous partage donc ce code assez explicite :

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

int main()
{
    JOYINFOEX Joypad_Info; // structure d'information d'état du joystique
    JOYCAPS InfosCaps; // structure d'infos sur les capacités du joystick
    Joypad_Info.dwFlags = JOY_RETURNALL;

    int delai;
    int noerr[2] = {0, 0};
    system("title conaitre le ctrl d'une touche d'un joystique");
    printf("tester un joystique\n");
    printf("delai: ");
    scanf("%d", &delai);

    /* affectation du joystick à la structure d'état */
    switch(joyGetPosEx(JOYSTICKID1,&Joypad_Info))
    {
        case MMSYSERR_NODRIVER:
            printf("le joystique n'est pas present.\n");
        break;

        case MMSYSERR_INVALPARAM:
			printf("un paramètre non valide a ete passe..\n");
        break;

        case MMSYSERR_BADDEVICEID:
			printf("l'identifiant joystick spécifié n'est pas valide.\n");
        break;

        case JOYERR_UNPLUGGED:
           printf("le joystick specifie n'est pas connecte auBUTACTUAL systeme.\n");
        break;

        case JOYERR_PARMS:
           printf("l'identifiant joystick specifie n'est pas valide.\n");
        break;

        default:
           noerr[0] = 1;
        break;
    }
    /* affectation du joystick à la structure d'info de capacité */
	switch(joyGetDevCaps(JOYSTICKID1, &InfosCaps, sizeof(JOYCAPS)))
    {
        case MMSYSERR_NODRIVER:
            printf("le joystique n'est pas present.\n");
        break;

        case MMSYSERR_INVALPARAM:
			printf("un paramètre non valide a ete passe..\n");
        break;

        default:
			noerr[1] = 1;
        break;
    }
	if( noerr[0] && noerr[1])
	{
		printf("le joystique est pret a l'emploi.\n");
    }
	else
	{
		exit(EXIT_FAILURE);
	}
	while(1)
    {
		Sleep(delai);
        joyGetPosEx(JOYSTICKID1,&Joypad_Info);
        if(Joypad_Info.dwButtons != NULL)
        {
            printf("\n__ ctrl : %d __", Joypad_Info.dwButtons);
        }
        else
        {
            /* pad analogique gauche */
			int Yup = (Joypad_Info.dwYpos < (InfosCaps.wYmax)/2); // en avant
			int Ydown = (Joypad_Info.dwYpos > (InfosCaps.wYmax)/2); // en arrière
			int Xleft = (Joypad_Info.dwXpos < (InfosCaps.wXmax)/2); // à gauche
			int Xright = (Joypad_Info.dwXpos > (InfosCaps.wXmax)/2); // à droite

            /* pad analogique droit */
			int Zup = (Joypad_Info.dwZpos < (InfosCaps.wZmax)/2); // en avant
			int Zdown = (Joypad_Info.dwZpos > (InfosCaps.wZmax)/2); // en arrière
			int Rleft = (Joypad_Info.dwRpos < (InfosCaps.wRmax)/2); // à gauche
			int Rright = (Joypad_Info.dwRpos > (InfosCaps.wRmax)/2); // à droite

			if(Yup)
			{
				printf("\n__ Yup : %d/%d __", Joypad_Info.dwYpos, InfosCaps.wYmax);
			}
            if(Ydown)
			{
				printf("\n__ Ydown : %d/%d __", Joypad_Info.dwYpos, InfosCaps.wYmax);
			}
            if(Xleft)
			{
				printf("\n__ Xleft : %d/%d __", Joypad_Info.dwYpos, InfosCaps.wYmax);
			}
            if(Xright)
			{
				printf("\n__ Xright : %d/%d __", Joypad_Info.dwYpos, InfosCaps.wYmax);
			}

            if(Zup)
			{
				printf("\n__ Zup : %d/%d __", Joypad_Info.dwYpos, InfosCaps.wYmax);
			}
            if(Zdown)
			{
				printf("\n__ Zdown : %d/%d __", Joypad_Info.dwYpos, InfosCaps.wYmax);
			}
            if(Rleft)
			{
				printf("\n__ Rleft : %d/%d __", Joypad_Info.dwYpos, InfosCaps.wYmax);
			}
            if(Rright)
			{
				printf("\n__ Rright : %d/%d __", Joypad_Info.dwYpos, InfosCaps.wYmax);
			}
        }
    }
    return 0;
}

Conclusion :


Plus d'infos sur http://msdn.microsoft.com/en-us/library/dd757108(VS.85).aspx
Ajouter un commentaire Commentaires
Messages postés
466
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
17 octobre 2011

Lu, tu dois linker winmm.
Tout était expliqué sur http://msdn.microsoft.com/en-us/library/dd757108(VS.85).aspx mais en conclusion ça ne l'a pas bien marqué.
Messages postés
1
Date d'inscription
mercredi 21 janvier 2009
Statut
Membre
Dernière intervention
15 janvier 2010

Bonjours, dans le cadre d'un projet je dois gérer un joystick.
Je viens de tester ton programme, mais je me fait jeter par le compilateur, il ne connais pas les fonctions suivantes :
- joyGetPosEx@8
- joyGetDevCapsA@12

Pourrais-je avoir ton aide, merci d'avance
Messages postés
466
Date d'inscription
mercredi 12 août 2009
Statut
Membre
Dernière intervention
17 octobre 2011

...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.