用游戏操作杆摸拟鼠标[VC/C++编程]
本文“用游戏操作杆摸拟鼠标[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
要编写一个支持游戏操作杆的利用程序,首先必必要捕捉游戏操作杆,接着要处理Windows发送给程序窗口的操作杆消息,最后利用完操作杆后,还应将捕捉的操作杆资源释放.
调用API函数joySetCapture能捕捉游戏操作杆.调用joySetCapture函数后,操作杆产生的全部消息将会发送到指定的窗口.它的原型为:
MMRESULT joySetCapture(HWND hwnd, UINT uJoyID, UINT uPeriod, BOOL fChanged );
此中,参数hwnd为接纳操作杆消息的窗口句柄;参数uJoyID为要捕捉的操作杆标识,它可以是JOYSTICKID1或是JOYSTICKID2,即第1、第二个游戏操作杆;参数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);
}
捕捉游戏操作杆后,Windows会把全部的操作杆消息发送给窗口Form1.当操作杆的方向钮按被按下时,产生的是MM_JOY1MOVE消息,当功效按钮被按下时,产生MM_JOY1BUTTONDOWN消息.在程序中辨别呼应并处理这两个消息,便可以模拟鼠标的移动和点击.
但是在C++ Builder中,这两条消息并非尺度的Windows消息,这就需求我们自已定义和处理消息了.在C++ Builder里呼应自定义消息的步骤为:
1.成立消息映射表
2.声明消息处理函数
3.编写消息处理函数
首先在代码编辑窗口点击右键,挑选弹出菜单的“Open Source/Header File”或是按热键Ctrl+F6,翻开窗体Form1头文件“Uint1.h”.
在窗体的TForm1类中的公有成员中加入代码来成立消息映射表,把消息的处理权交给自定义的消息处理函数:
public:
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(MM_JOY1BUTTONDOWN,Tmessage,OnJoyDown)
MESSAGE_HANDLER(MM_JOY1MOVE,Tmessage,OnJoyMove)
END_MESSAGE_MAP(Tform)
然后在类的私有成员中加入代码声明消息处理函数:
private:
void __fastcall OnJoyDown(Tmessage &Message);
void __fastcall OnJoyMove(Tmessage &Message);
以上是“用游戏操作杆摸拟鼠标[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |