前言
在上篇博文中,已经介绍了windows底层对于游戏摇杆的支持头文件。
在本篇博文中,详细介绍游戏摇杆开发中常用的函数与结构体。
通过阅读源程序,我发现官方的说明应该是有问题的。
这篇博文应该对应的是函数joyGetDevCapsA以及结构体JOYCAPSA。
函数joyGetDevCaps
这个函数用来确定摇杆的功能。
语法
MMRESULT joyGetDevCaps(
UINT uJoyID,
LPJOYCAPS pjc,
UINT cbjc
);
定义源代码:
#ifdef UNICODE
#define joyGetDevCaps joyGetDevCapsW
#else
#define joyGetDevCaps joyGetDevCapsA
#endif // !UNICODE
参数
uJoyID
要识别操纵杆的标识符。有效值取值范围为-1到15。如果该值取值-1,无论设备是否存在,都可以检索JOYCAPS结构体中的成员szRegKey。
pjc
指向JOYCAPS结构体的指针。该结构体包含操纵杆的功能。
cbjc
JOYCAPS 结构体的字节容量。
返回值
如果成功,则返回 JOYERR_NOERROR。否则,会返回以下错误值:
返回值 | 描述 |
---|---|
MMSYSERR_NODRIVER | 操纵杆驱动不存在,或者操纵杆标识符无效。 |
MMSYSERR_INVALPARAM | 传递了一个无效的参数。 |
补充
使用函数joyGetNumDevs以设定驱动支持的操纵杆数量。
当参数cbjc的值无效时,这个函数将运行失败。
支持
名称 | 条件 |
---|---|
最低支持的客户端 | Windows 2000 Professional [desktop apps only] |
最低支持的服务器 | Windows 2000 Server [desktop apps only] |
目标平台 | Widows |
头文件 | joystickapi.h (include Windows.h) |
LIB | Winmm.lib |
DLL | Winmm.dll |
结构体 JOYCAPS
结构体JOYCAPS 包含操纵杆功能信息。
语法
typedef struct joycaps_tag {
WORD wMid;
WORD wPid;
char szPname[MAXPNAMELEN];
UINT wXmin;
UINT wXmax;
UINT wYmin;
UINT wYmax;
UINT wZmin;
UINT wZmax;
UINT wNumButtons;
UINT wPeriodMin;
UINT wPeriodMax;
UINT wRmin;
UINT wRmax;
UINT wUmin;
UINT wUmax;
UINT wVmin;
UINT wVmax;
UINT wCaps;
UINT wMaxAxes;
UINT wNumAxes;
UINT wMaxButtons;
char szRegKey[MAXPNAMELEN];
char szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
} JOYCAPS, *PJOYCAPS, *NPJOYCAPS, *LPJOYCAPS;
定义源代码:
#ifdef UNICODE
typedef JOYCAPSW JOYCAPS;
typedef PJOYCAPSW PJOYCAPS;
typedef NPJOYCAPSW NPJOYCAPS;
typedef LPJOYCAPSW LPJOYCAPS;
#else
typedef JOYCAPSA JOYCAPS;
typedef PJOYCAPSA PJOYCAPS;
typedef NPJOYCAPSA NPJOYCAPS;
typedef LPJOYCAPSA LPJOYCAPS;
#endif // UNICODE
成员
- wMid
制造商标识符。 - wpid
产品标识符。 - szPname
以空为结尾的字符串。该字符串包含产品名称。 - wXmin
最小X坐标。 - wXmax
最大X坐标。 - wYmin
最小Y坐标。 - wYmax
最大Y坐标。 - wZmin
最小Z坐标。 - wZmax
最大Z坐标。 - wNumButtons
操纵杆按钮数量。 - wPeriodMin
当被 joySetCapture函数捕获时,支持的最小轮询频率。 - wPeriodMax
当被 joySetCapture函数捕获时,支持最大的轮询频率。 - wRmin
最小舵值(rudder value)。为运动的第四轴。 - wRmax
最大舵值(rudder value)。为运动的第四轴。 - wUmin
最小u坐标。为运动第五轴。 - wUmax
最大u坐标。为运动第五轴。 - wVmin
最小v坐标。为运动第六轴。 - wVmax
最大v坐标。为运动第六轴。 - wCaps
操纵杆功能。操纵杆具有功能对应的Flag。
Flag | 描述 |
---|---|
JOYCAPS_HASZ | 操纵杆有Z坐标轴信息。 |
JOYCAPS_HASR | 操纵杆有R坐标轴(第四轴)信息。 |
JOYCAPS_HASU | 操纵杆有U坐标轴(第五轴)信息。 |
JOYCAPS_HASV | 操纵杆有V坐标值(第六轴)信息。 |
JOYCAPS_HASPOV | 操纵杆有POV信息。 |
JOYCAPS_POV4DIR | 操纵杆POV支持离散值(中心,向前,向后,向左,向右) |
JOYCAPS_POVCTS | 操纵杆POV支持连续方位度数。 |
#define JOYCAPS_HASZ 0x0001
#define JOYCAPS_HASR 0x0002
#define JOYCAPS_HASU 0x0004
#define JOYCAPS_HASV 0x0008
#define JOYCAPS_HASPOV 0x0010
#define JOYCAPS_POV4DIR 0x0020
#define JOYCAPS_POVCTS 0x0040
-
wMaxAxes
操纵杆支持的最大轴数。 -
wNumAxes
操纵杆当前使用的轴数。 -
wMaxButtons
操纵杆支持的最大的按键数。 -
szRegKey
以空字符结尾的字符串。包含操纵杆注册表项。 -
szOEMVxD
以空字符结尾的字符串。标识操纵杆驱动程序OEM。
支持
名称 | 条件 |
---|---|
最低支持的客户端 | Windows 2000 Professional [desktop apps only] |
最低支持的服务器 | Windows 2000 Server [desktop apps only] |
头文件 | joystickapi.h (include Windows.h) |