2009-06-27 4 views
1

DirectInputを使用して入力デバイスを処理します。各デバイスのデバイスと要素を列挙します。DirectInputアナログジョイスティックの範囲

私のゲームパッドでアナログスティックを使用している場合、値は0-65535の範囲で報告されます。 は常にで、絶対軸のすべてのタイプの場合ですか?

そうでない場合:DX8入力要素のDIDEVICEOBJECTDATA :: dwData(DIDFT_ABSAXISで列挙されている)の範囲を調べる方法はありますか?私が考えることができる唯一の他の選択肢は、私のアプリの中で自宅で作られた内部校正を使うことです。

答えて

3

に0まで、これらの値をスケーリング:

 
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

GetPropertyを使用して範囲を取得できませんし、適切なDIPROPRANGE構造を渡して埋め込むことができませんか? DIPROP_RANGE GUIDを使用します。

+0

をこれは私のための答えのように聞こえるだけ実装する必要がありますし、チェック。前もって感謝します! –

0

はより:http://www.wingmanteam.com/files/Tools/DXTweak/Readme.txt

ゲームコントローラドライバは、通常、DirectInputは、0と655の間の整数値として軸位置情報 を報告します。 DirectInputの は直線ゴズはそう甘くそれを置くように、私が働いており、次のようでした65535