2009-06-27 113 views
1

我使用DirectInput来处理输入设备,我列举了每个设备上的设备和元素。DirectInput模拟游戏杆范围

在我的游戏手柄上使用模拟棒时,它们会报告0-65535范围内的值。这个总是所有类型的绝对坐标轴的情况?

如果没有:是否有任何方法来找出DX8输入元素的DIDEVICEOBJECTDATA :: dwData(用DIDFT_ABSAXIS枚举)的范围?我能想到的唯一的其他选择是在我的应用程序中使用一些自制的内部校准,并且这听起来太80年代了。

回答

3

由于戈兹贝达如此悦耳,穿上它,我做了以下,这工作:

 
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

这听起来像答案对我来说,只需要实施和检查。提前致谢! – 2009-07-01 14:08:04