2009-06-27 6 views
1

J'utilise DirectInput pour gérer des dispositifs d'entrée, I énumère les dispositifs et éléments sur chaque appareil.DirectInput plage de joystick analogique

Lorsque vous utilisez les sticks analogiques sur mon tapis de jeu, ils rapportent des valeurs dans la gamme 0-65535. Est-ce toujours le cas pour tous les types d'axes absolus?

Sinon: existe-t-il un moyen de connaître la plage d'un élément d'entrée DX8 DIDEVICEOBJECTDATA :: dwData (énuméré avec DIDFT_ABSAXIS)? La seule autre option que je peux penser est d'utiliser un calibrage interne fait maison à l'intérieur de mon application, et ce son trop 80 'pour être vrai.

Répondre

3

Comme Goz a si gentiment, je fait ce qui suit, qui a travaillé:

 
dev->EnumObjects(EnumElementsCallback, 0, DIDFT_ALL); 

BOOL CALLBACK EnumElementsCallback(LPCDIDEVICEOBJECTINSTANCE dev, LPVOID) 
{ 
    if ((dev->dwType & DIDFT_ABSAXIS) != 0) 
    { 
     DIPROPRANGE range; 
     range.diph.dwSize = sizeof(DIPROPRANGE); 
     range.diph.dwHeaderSize = sizeof(DIPROPHEADER); 
     range.diph.dwHow = DIPH_BYID; 
     range.diph.dwObj = dev->dwType; 
     if (lDevice->mDIDevice->GetProperty(DIPROP_RANGE, &range.diph) == DI_OK) 
     { 
      ... = range.lMin; 
      ... = range.lMax; 
     } 
    } 
} 
6

Tu ne peux pas obtenir la gamme en utilisant GetProperty et passant dans une structure appropriée DIPROPRANGE à remplir? Utilisez le GUID DIPROP_RANGE.

+0

Cela sonne comme la réponse pour moi, viennent de mettre en œuvre et vérifier. Merci d'avance! –