• 全国客户服务热线:4006-054-001 疑难解答:173-0411-9111(7X24受理投诉、建议、合作、售前咨询),155-4267-2990(售前),传真:0411-83767788,微信:543646
当前位置:主页 > 技术方案 > 工控技术

基于C++的游戏操纵杆模拟鼠标的程序

时间:2023-09-29 10:33来源: 作者: 点击:
>基于C++的游戏操纵杆模拟鼠标的程序

  要编写一个支持的应用,首先必须要捕获,接着要处理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);

  }



>基于C++的游戏操纵杆模拟鼠标的程序
热门服务和内容