JOYBUTTON_5 неправильно определен в mmsystem.h?

В настоящее время я пишу код на C ++ для обнаружения нажатий кнопок на геймпаде. Я использую следующий код для определения массива возможных нажатий кнопок:

#include <windows.h>
#include <mmsystem.h>

this->buttons[0] = JOY_BUTTON1;
this->buttons[1] = JOY_BUTTON2;
...
this->buttons[31] = JOY_BUTTON32;

А затем с помощью чего-то вроде следующего, чтобы определить, какая кнопка была нажата:

joyGetPosEx(this->joyStickId, &info);

buttonPressed = false;

for(int i=0; i<32; i++){
if((info.dwButtons & this->buttons[i]) == this->buttons[i]){
buttonPressed = true;
cout << "button number " << (i+1) << "was pressed!" << endl;
}
}

if(buttonPressed === false){
cout << "could not detect button press, dwButtons was set to: " << info.dwButtons << endl;
}

Это прекрасно работает для кнопок геймпада 1-4. Однако кнопки 5-32 не работают. Например, при нажатии кнопки 5 на геймпаде программа думает dwButtons установлен на 16. JOY_BUTTON5 как определено в mmsystem.h 257. Так что мне кажется, что JOY_BUTTON5 — 32 неправильно определены в mmsystem. Это правильно, или я что-то упустил?

1

Решение

Я полагаю, вы используете MinGW. Да, это ошибка в их заголовочных файлах. Заголовочные файлы Microsoft Win32 имеют разные значения (правильные).

MinGW в настоящее время имеет:

#define JOY_BUTTON5 257
#define JOY_BUTTON6 513
#define JOY_BUTTON7 1025
#define JOY_BUTTON8 2049

Так должно быть:

#define JOY_BUTTON5 16
#define JOY_BUTTON6 32
#define JOY_BUTTON7 64
#define JOY_BUTTON8 128
0

Другие решения


По вопросам рекламы [email protected]