快速业务通道

在C++ Builder中使用游戏操纵杆

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-29

在Windows环境下通过编程来操纵鼠标、键盘是一件再简单不过的事了,不过大家有没有想过要尝试一下另一样我们比较常见的输入工具——游戏操纵杆呢?在某些情况下,尤其是象编制一些小型的游戏软件的时候,加入对游戏操纵杆的支持可以给使用者提供更为友好的人机界面,极大的提高游戏软件的可玩性。

C++Builder中没有专门控制操纵杆函数(其实在常见的编程语言中基本上都没有),因此要增加对游戏操纵杆的支持,就要和Windows的MCI API函数打交道,这里我们首先介绍一些在读取操纵杆的属性、状态,位置和按钮信息时要用到的API函数、常量及数据结构。

相关常量:

#define MM_JOY1MOVE         0x3A0    /* 用以传递操纵杆当前状态的一些消息 */

#define MM_JOY2MOVE         0x3A1

#define MM_JOY1ZMOVE        0x3A2

#define MM_JOY2ZMOVE        0x3A3

#define MM_JOY1BUTTONDOWN   0x3B5

#define MM_JOY2BUTTONDOWN   0x3B6

#define MM_JOY1BUTTONUP     0x3B7

#define MM_JOY2BUTTONUP     0x3B8

#define JOY_BUTTON1         0x0001    /* 用以表明当前操纵杆的状态 */

#define JOY_BUTTON2         0x0002

#define JOY_BUTTON3         0x0004

#define JOY_BUTTON4         0x0008

#define JOY_BUTTON1CHG      0x0100

#define JOY_BUTTON2CHG      0x0200

#define JOY_BUTTON3CHG      0x0400

#define JOY_BUTTON4CHG      0x0800

/* 游戏操纵杆错误返回值 */

#define JOYERR_BASE            160

#define JOYERR_NOERROR        (0)                  /* 正常 */

#define JOYERR_ParmS          (JOYERR_BASE+5)      /* 参数错误 */

#define JOYERR_NOCANDO        (JOYERR_BASE+6)      /* 无法正常工作 */

#define JOYERR_UNPLUGGED      (JOYERR_BASE+7)      /* 操纵杆未连接 */

/* 操纵杆标识号 */

#define JOYSTICKID1         0

#define JOYSTICKID2         1

相关函数:

WINMMAPI UINT WINAPI joyGetNumDevs(void);

获取设备标识号。

MMRESULT WINAPI joyGetDevCaps(UINT uJoyID, LPJOYCAPS pjc, UINT cbjc);

获取操纵杆属性信息,以结构体JoyCaps接收。

WINMMAPI MMRESULT WINAPI joyGetPos(UINT uJoyID, LPJOYINFO pji);

获取操纵杆位置和按钮状态,以结构体接收。

WINMMAPI MMRESULT WINAPI joyGetThreshold(UINT uJoyID, LPUINT puThreshold);

读取操纵杆移动阈值。

WINMMAPI MMRESULT WINAPI joyReleaseCapture(UINT uJoyID);

结束对操纵杆信息的接收。

WINMMAPI MMRESULT WINAPI joySetCapture(HWND hwnd, UINT uJoyID, UINT uPeriod,

BOOL fChanged);

设置接收某一操纵杆的信息的窗口以及将何种频度接收。

WINMMAPI MMRESULT WINAPI joySetThreshold(UINT uJoyID, UINT uThreshold);

设置操纵杆移动阈值。

相关结构体: typedef struct joyCaps{

    WORD wMid;                  /* 制造商标识 */

    WORD wPid;                  /* 生产编号 */

    char szPname[MAXPNAMELEN];  /* 产品名称 */

    UINT wXmin;                 /* X轴最小值 */

    UINT wXmax;                 /* X轴最大值 */

    UINT wYmin;                 /* Y轴最小值 */

    UINT wYmax;                 /* Y轴

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号