使用操縱桿編寫一個小程序,我很難理解joyGetPos()的工作原理,而joyGetPosEx()不能。爲什麼joyGetPos有效,而joyGetPosEx不會呢?
我做了一些使用C++的基本程序,這是我第一個使用遊戲杆的項目。
平臺:Windows 7的64位
搖桿:在操縱桿上的功能http://www.thrustmaster.com/en_UK/products/hotas-cougar
文件:http://msdn.microsoft.com/en-us/library/windows/desktop/dd757121(v=vs.85).aspx
代碼JOYINFO
#include <iostream>
#include <stdio.h>
#include <string>
#include <Windows.h>
int main(int argc, char** argv)
{
while (true)
{
unsigned int num_dev = joyGetNumDevs();
if (0 == num_dev)
{
std::cout << "[ERROR ] num_dev == 0" << std::endl;
}
/* JOYINFO */
// retreiving the joystick values
JOYINFO joyinfo;
MMRESULT joygetpos_result = joyGetPos(JOYSTICKID1, &joyinfo);
// if tested, joygetpos_result does not produce any error
// values change when playing with the stick
std::cout << "joinfo.wXpos = " << joinfo.wXpos << std::endl;
std::cout << "joinfo.wYpos = " << joinfo.wYpos << std::endl;
}
}
這個版本是相當不錯,但大灰帽和18箇中的4個按鈕不起作用。
代碼JOYINFOEX
#include <iostream>
#include <stdio.h>
#include <string>
#include <Windows.h>
int main(int argc, char** argv)
{
while (true)
{
unsigned int num_dev = joyGetNumDevs();
if (0 == num_dev)
{
std::cout << "[ERROR ] num_dev == 0" << std::endl;
}
/* JOYINFOEX */
// retreiving the joystick values
JOYINFOEX joyinfoex;
MMRESULT joygetposex_result = joyGetPosEx(JOYSTICKID1, &joyinfoex);
// error always produced
if (joygetposex_result == JOYERR_PARMS)
{
std::cout << "[ERROR ] JOYERR_PARMS" << std::endl;
}
// values does not change when playing with the stick
std::cout << "joinfoex.dwXpos = " << joinfoex.dwXpos << std::endl;
std::cout << "joinfoex.dwYpos = " << joinfoex.dwYpos << std::endl;
}
這第二個版本總是產生JOYERR_PARMS錯誤。我試圖將JOYSTICKID1從1改爲15,但沒有任何成功。我認爲我沒有正確使用Windows功能,但不幸的是,我無法理解使用它的正確方法。
您是否面對同樣的問題?我使用良好的API來使用這種遊戲杆嗎?
感謝您的幫助。
RTFM:「您必須設置dwSize和dwFlags成員或joyGetPosEx將失敗。」 –