windows DirectInput模拟操纵杆范围

icomxhvb  于 2023-08-07  发布在  Windows
关注(0)|答案(3)|浏览(90)

我使用DirectInput来处理输入设备,我枚举每个设备上的设备和元素。
当使用我的游戏垫上的模拟棒时,它们报告的值范围为0-65535。是否所有类型的绝对轴都是这种情况?
如果没有:是否有任何方法可以找出DX 8输入元素的DIDEVICEOBJECTDATA::dwData(使用DIDFT_ABSAXIS枚举)的范围?我能想到的唯一其他选择是在我的应用程序中使用一些自制的内部校准,这听起来太80年代了,不可能是真的。

u1ehiz5o

u1ehiz5o1#

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

ne5o7dgx

ne5o7dgx2#

正如戈兹所说的那样,我做了以下事情,效果很好:

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;
        }
    }
}

字符串

enxuqcxy

enxuqcxy3#

From:http://www.wingmanteam.com/files/Tools/DXTweak/Readme.txt
游戏控制器驱动程序通常将轴位置信息作为0到655之间的整数值报告给DirectInput。DirectInput将这些值线性缩放到0到65535。

相关问题