Gestion d'un joystique avec l'apiwnd

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

A voir également

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.