Perte de device avec dinput

Résolu
cs_chamoine Messages postés 8 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 1 juin 2005 - 31 mai 2005 à 14:35
cs_chamoine Messages postés 8 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 1 juin 2005 - 31 mai 2005 à 16:03
J'ai un soucis lorsque j'agrandi mon application après l'avoir réduite.

Je suis obligé de killer celle-ci....

J'arrive parfaite a récupérer mes surfaces et le clavier mais pas la souris sa bloque.



Voici mon code servant a géré la souris:

// On remet a zero les boutons

m_bButton0 m_bButton1 FALSE;



DIDEVICEOBJECTDATA data;

BOOL bTermine = FALSE;

DWORD dwNumElements = 1;



// Nettoyage de la structure DIDEVICEOBJECTDATA

memset(&data, 0, sizeof(DIDEVICEOBJECTDATA));



// Récupération des infos sur la souris

while(!bTermine)

{

// Pointeur pour gérer la souris

if(m_dSouris->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), &data,

&dwNumElements, 0) == DIERR_INPUTLOST)

{

if(m_dSouris->Acquire() == DI_OK)



m_dSouris->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), &data,
&dwNumElements, 0);

}



// Calcul la nouvelle position et vérifie si un bouton a été cliqué

switch(data.dwOfs)

{

case DIMOFS_X:

m_iCurseurXPos += data.dwData;

break;



case DIMOFS_Y:

m_iCurseurYPos += data.dwData;

break;

// bouton gauche

case DIMOFS_BUTTON0:

// touche enfoncée

if (data.dwData & 0x80)

m_bButton0 = TRUE;

break;

// bouton droite

case DIMOFS_BUTTON1:

// touche enfoncée

if (data.dwData & 0x80)

m_bButton1 = TRUE;

break;

}



// On a fini :-)

if (dwNumElements == 0)

bTermine = TRUE;

}



Si vous avez unr idée se n'est pas de refut

1 réponse

cs_chamoine Messages postés 8 Date d'inscription lundi 28 février 2005 Statut Membre Dernière intervention 1 juin 2005
31 mai 2005 à 16:03
Enfaite j'ai trouvé en ajoutant une variable servant de compteur évitant un appel directe du device de la souris



Donc si quelqu'un a le même problème voila ma soluce:

on déclare la variable int iRun = 0;



dans la boucle du jeu:

while(TRUE)

{

....

if(iRun++ >= 2)

GestionSouris();

....

}



dans la fonction traitant les messages de windows:

switch(msg)

{

case WM_ACTIVATE:

// Activate/déactivate le jeu

if (wParam == WA_INACTIVE)

{

if(m_pInput != NULL)

m_pInput->InputDeactive();

SetEtat(FALSE);

}

else

{

if(m_pInput != NULL)

m_pInput->InputActive();

iRun = 0;

SetEtat(TRUE);

}

return 0;

....



voili voilou
3
Rejoignez-nous