为什么joyGetPos可以工作,而joyGetPosEx不行
Why joyGetPos works, and joyGetPosEx does not?
目前正在编写一个使用操纵杆的小程序,我很难理解为什么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,但没有任何成功。我想我没有正确地使用窗口函数,但不幸的是,我不能理解正确的方法来使用它。
你遇到过同样的问题吗?我是否使用了良好的API来使用这种操纵杆?
谢谢你的帮助。
来自joyGetPosEx的MSDN页面:
指向JOYINFOEX结构的指针,该结构包含扩展的位置信息和操纵杆的按钮状态。你必须设置dwSize和dwFlags成员,否则joyGetPosEx将失败。
您需要用大小和标志填充变量joyinfoex。
joyinfoex.dwSize = sizeof(joyinfoex);
joyinfoex.dwFlags = JOY_RETURNALL;
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- C++代码在台式机上工作正常,但在笔记本电脑上则不行
- C++模板方法:为什么 Node<int> 没问题,但 Node 不行<float>?
- 为什么使用两个sizeofs可以检查一个类是否默认可构造,而使用一个却不行
- C++选项定价函数..单独工作很好,但对于股票价格的范围(向量)来说不行
- 代码有效 数学不行
- c++排序数组.我的分类在第一次传球时有效,但在那之后就不行了
- 命名空间与包含的类同名,gcc可以,clang不行
- 强制转换操作符函数在g++中可以很好地编译,但在其他编译器中不行.为什么
- 程序在调试中工作正常,但在发布中不行
- 为什么joyGetPos可以工作,而joyGetPosEx不行
- 代码在VS 2008中运行良好,但在更高版本的VS中则不行
- 代码在Visual Studio中可以很好地编译,但在使用g++的Unix终端中就不行了.我在多维向量处得到一个错误.为
- 增强JSON解析器在MacOS上转义引号,但在Linux上不行