Windows 直接输入模拟操纵杆范围

Windows 直接输入模拟操纵杆范围,windows,directx,enumeration,directinput,Windows,Directx,Enumeration,Directinput,我使用DirectInput来处理输入设备,我枚举每个设备上的设备和元素 当在我的游戏板上使用模拟棒时,它们报告的数值范围为0-65535。所有类型的绝对轴都是这样吗 如果没有:是否有任何方法可以找出DX8输入元素的DIDEVICEOBJECTDATA::dwData(用DIDFT_ABSAXIS枚举)的范围?我唯一能想到的另一个选择是在我的应用程序中使用一些自制的内部校准,这听起来太不真实了。你不能使用GetProperty并传递一个合适的DIPROPRANGE结构来填充范围吗?使用DIPRO

我使用DirectInput来处理输入设备,我枚举每个设备上的设备和元素

当在我的游戏板上使用模拟棒时,它们报告的数值范围为0-65535。所有类型的绝对轴都是这样吗


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

你不能使用GetProperty并传递一个合适的DIPROPRANGE结构来填充范围吗?使用DIPROP_范围GUID。

您不能使用GetProperty并传入要填充的适当DIPROPRANGE结构来获取范围吗?使用DIPROP_范围GUID。

来自:

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

从:

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

正如Goz甜言蜜语地说的那样,我做了以下工作,效果很好:

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; } } } dev->EnumObjects(enumementscallback、0、DIDFT\u ALL); BOOL回调枚举元素scallback(LPCDIDEVICEOBJECTINSTANCE dev,LPVOID) { 如果((dev->dwType&DIDFT_ABSAXIS)!=0) { 双速范围; range.diph.dwSize=sizeof(DIPROPRANGE); range.diph.dwHeaderSize=sizeof(DIPROPHEADER); range.diph.dwHow=diph_BYID; range.diph.dwObj=dev->dwType; 如果(设备->mDIDevice->获取属性(DIPROP\u范围和RANGE.dip)==DI\u确定) { …=范围.lMin; …=range.lMax; } } }
正如Goz甜言蜜语地说的那样,我做了以下几点,效果很好:

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; } } } dev->EnumObjects(enumementscallback、0、DIDFT\u ALL); BOOL回调枚举元素scallback(LPCDIDEVICEOBJECTINSTANCE dev,LPVOID) { 如果((dev->dwType&DIDFT_ABSAXIS)!=0) { 双速范围; range.diph.dwSize=sizeof(DIPROPRANGE); range.diph.dwHeaderSize=sizeof(DIPROPHEADER); range.diph.dwHow=diph_BYID; range.diph.dwObj=dev->dwType; 如果(设备->mDIDevice->获取属性(DIPROP\u范围和RANGE.dip)==DI\u确定) { …=范围.lMin; …=range.lMax; } } }
这听起来像是我的答案,只是要实施和检查。提前谢谢!这听起来像是我的答案,只是要实施和检查。提前谢谢!