Вопрос

Я использую DirectInput для обработки устройств ввода, я перечисляю устройства и элементы на каждом устройстве.

При использовании аналоговых джойстиков на моем игровом планшете они сообщают значения в диапазоне 0-65535.Неужели это всегда случай для всех типов абсолютной оси?

Если нет:есть ли какой-либо способ узнать диапазон DIDEVICEOBJECTDATA входного элемента DX8::dwData (перечисляется с помощью DIDFT_ABSAXIS)?Единственный другой вариант, который я могу придумать, - это использовать какую-нибудь самодельную внутреннюю калибровку внутри моего приложения, и это звучит слишком 80-х, чтобы быть правдой.

Это было полезно?

Решение 2

Как мило выразился Гоз, я сделал следующее, и это сработало:

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

Другие советы

Разве вы не можете получить диапазон, используя getProperty и передавая соответствующую структуру DIPROPRANGE для заполнения?Используйте идентификатор GUID DIPROP_RANGE.

От : http://www.wingmanteam.com/files/Tools/DXTweak/Readme.txt

Драйвер игрового контроллера обычно передает информацию о положении оси в виде целых значений от 0 до 655 в DirectInput.DirectInput линейно масштабирует эти значения от 0 до 65535.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top