基于C++的游戏操纵杆模拟鼠标的程序
时间:2023-09-29 10:33来源: 作者: 点击: 次要编写一个支持的应用,首先必须要捕获,接着要处理Windows发送给窗口的消息,最后使用完操纵杆后,还应将捕获的操纵杆资源释放。
调用API函数joySetCapture能捕获操纵杆。调用joySetCapture函数后,操纵杆产生的所有消息将会发送到指定的窗口。它的原型为:
MMRESULT joySetCapture(HWND hwnd, UINT uJoyID, UINT uPeriod, BOOL fChanged );
其中,参数hwnd为接收操纵杆消息的窗口句柄;参数uJoyID为要捕获的操纵杆标识,它可以是JOYSTICKID1或是JOYSTICKID2,即第一、第二个游戏操纵杆;参数uPeriod为轮询的频率,单位为毫秒,它指定给应用发送有关操纵杆信息的间隔时间;参数fChanged为改变位置标识,可设为false。
要释放操纵杆的捕获时,使用joyReleaseCapture函数。它只有一个参数,就是操纵杆的标识JOYSTICKID1或JOYSTICKID2。
下面,就让我们用Borland C++ Builder 5.0来做一个用游戏操纵杆的程序。
运行Borland C++ Builder 5.0,双击窗体Form1,在Form1的OnCreate事件中加入以下代码捕获一个游戏操纵杆:
void __fastcall TForm1::FormCreate(Tobject *Sender)
{
int JoyMsg;
//捕获游戏操纵杆
JoyMsg=joySetCapture(Handle,JOYSTICKID1,0,false);
if(JoyMsg==JOYERR_NOCANDO)
{
//捕获失败
ShowMessage(不能捕获游戏杆!);
}
else
{
if(JoyMsg==JOYERR_UNPLUGGED)
{
//没有连接
ShowMessage(游戏杆未与系统连接!);
}
else
{
if(JoyMsg==MMSYSERR_NODRIVER)
{
//没有安装
ShowMessage(系统没有安装游戏杆!);
}
else
{
//捕获成功
ShowMessage(捕获游戏杆成功!);
}
}
}
在Form1的OnCloseQuery事件中加入代码,让程序关闭时释放操纵杆捕获的资源:
void __fastcall TForm1::FormCloseQuery(Tobject *Sender, bool CanClose)
{
//释放操纵杆捕获
joyReleaseCapture(JOYSTICKID1);
}