2009-06-27 3 views
1

Ich benutze DirectInput, um Eingabegeräte zu behandeln, ich zähle Geräte und Elemente auf jedem Gerät auf.DirectInput Analog Joystick Bereich

Bei Verwendung der Analogsticks auf meinem Gamepad melden sie Werte im Bereich 0-65535. Ist das immer der Fall für alle Arten von absoluten Achsen?

Wenn nicht: Gibt es eine Möglichkeit, den Bereich eines DX8-Eingabeelements DIDEVICEOBJECTDATA :: dwData (aufgezählt mit DIDFT_ABSAXIS) herauszufinden? Die einzige andere Möglichkeit, die ich mir vorstellen kann, ist eine hausgemachte interne Kalibrierung in meiner App zu verwenden, und das klingt zu '80er, um wahr zu sein.

Antwort

3

Als Goz so ist es süß setzen, habe ich die folgenden, die gearbeitet:

 
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

Können Sie den Bereich nicht mit GetProperty abrufen und eine entsprechende DIPROPRANGE-Struktur übergeben? Verwenden Sie die DIPROP_RANGE-GUID.

+0

Diese wie die Antwort klingt für mich, muss nur implementieren und prüfen. Danke im Voraus! –