在mmsystem.h中是否错误地定义了JOYBUTTON_5?

时间:2014-08-12 08:44:42

标签: c++ windows gamepad

我目前正在编写一些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 个答案:

答案 0 :(得分:0)

我假设您正在使用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