DirectInput模拟游戏杆范围

我使用DirectInput来处理input设备,我列举了每个设备上的设备和元素。

在我的游戏手柄上使用模拟棒时,它们报告0-65535范围内的值。 这对于所有types的绝对轴始终是这种情况吗?

如果没有:有什么办法找出DX8input元素的DIDEVICEOBJECTDATA :: dwData(用DIDFT_ABSAXIS枚举)的范围? 我能想到的唯一的另一个select是在我的应用程序中使用一些自制的内部校准,而且这听起来也是80年代的事实。

你不能使用GetProperty获得范围,并传入适当的DIPROPRANGE结构来填充? 使用DIPROP_RANGE GUID。

Goz如此甜蜜地说,我做了以下工作:

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

 BOOL CALLBACK EnumElementsCallback(LPCDIDEVICEOBJECTINSTANCE dev,LPVOID)
 {
    如果((dev-> dwType&DIDFT_ABSAXIS)!= 0)
     {
         DIPROPRANGE范围;
         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;
         }
     }
 }

来自: http : //www.wingmanteam.com/files/Tools/DXTweak/Readme.txt

游戏控制器驱动程序通常将轴位置信息作为0到655之间的整数值报告给DirectInput。 DirectInput将这些值线性缩放到0到65535。