一个游戏设备的Win32库,游戏杆,摇杆,手柄操作

原创 2008年09月29日 11:02:00
文件列表:
joystickLibrary
joystickLibrary_SRC
TestProjects
VisualC++2008 redistribution
History
vc2008使用此库的例程vc6使用此dll的例程

Introduction

This is a dll for getting state of the joystick. Simply Initialize the joystick, and Get the state. Works done,perfect!!

Background

One day, when i was writting a control program with a joystick, i found there is no simple way to control the joystick,the directx architecture is too complicate to understand for beginners. And also, there is many repeated works in writting this kind of codes. The last problem is that when we write a directinput program, we should input large amount of codes. So i wrote this dll, only have 3 functions, do all of the works.

Using the code

Step by step, i take a visual studio 6.0 project for an example:

step1: Download the four packages. 

step2: Integrade the library in your project, include the header file and announce the library name as follows:

  1. #include "JoystickWin32Dll.h"
  2. #pragma comment(lib,"JoystickWin32Dll.lib") 
step3: Edit your code, initialize the library in your program initialize zone or any position you need to initialize it:
  1.  // TODO: Add your control notification handler code here
  2.  // initialize the joystick library
  3.  if(S_OK==InitDirectInput(m_hWnd))
  4.  {   // if initialize secceed, start a timer to get the state periodically, the cycle time is 100ms
  5.      SetTimer(100,100,NULL);
  6.  }
  7.  else
  8.      AfxMessageBox(_T("Initialze failed"));
step4: Edit your code, in OnTimer() function, update the joystick state every time. And now we can get the current joystick state, and put it in a structure JOYSTICKSTATE.
  1. JOYSTICKSTATE sta;
  2. if(S_OK == UpdateInputState(&sta))
  3.     m_show.Format(_T("x=%d/t/ty=%d"),sta.lX,sta.lY);
  4. else
  5.     m_show.Format(_T("Not Succeed!"));  
if you still have some questions on using the library ,please review at the tests program or you can contact me, email cbeast@gmail.com at your service!

SRC 

header file (the comments hear are writen in chinese, i will change it into english some day):


  1. /*************************************************************************************
  2. * 文 件:JoystickWin32Dll.h
  3. * 相关文件:JoystickWin32Dll.lib 导入库文件
  4. * JoystickWin32Dll.dll 二进制库文件
  5. *
  6. * 注意事项:本库采用visual C++ 2008开发,所以在没有visual studio 2008的机器上使用必须先安装
  7. * visual c++ 2008的可再分发包。与库一起提供使用。
  8. *
  9. * 说 明:本库是用来简化游戏杆开发的,将原本繁复的DirectInput技术进行了封装,
  10. * 封装为三个函数,分别是:
  11. * LRESULT InitDirectInput(HWND hwnd);初始化函数,用来初始化DirectInput库。
  12. * VOID FreeDirectInput();清理函数,用来在程序中清理DirectInput相关的数据。
  13. * HRESULT UpdateInputState( LPJOYSTICKSTATE pstate);更新状态函数,更新当前游戏杆状态数据。
  14. *
  15. * 作 者:林茂
  16. * 完成日期:2008-9-27
  17. * 修改记录:2008-9-27 21:00 完成库的开发
  18. * 2008-9-28 12:00 解决库在vc6上无法使用的问题
  19. * 2008-9-28 15:00 交付
  20. **************************************************************************************/
  21. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  22. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 JOYSTICKWIN32DLL_EXPORTS
  23. // 符号编译的。在使用此 DLL 的
  24. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  25. // JOYSTICKWIN32DLL_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  26. // 符号视为是被导出的。
  27. #ifdef JOYSTICKWIN32DLL_EXPORTS
  28. #define JOYSTICKWIN32DLL_API __declspec(dllexport)
  29. #else
  30. #define JOYSTICKWIN32DLL_API __declspec(dllimport)
  31. #endif
  32. ////////////////////////////////////////////////////////////////////////
  33. typedef struct JOYSTICKSTATE {
  34. LONG lX; /* x-axis position */
  35. LONG lY; /* y-axis position */
  36. LONG lZ; /* z-axis position */
  37. LONG lRx; /* x-axis rotation */
  38. LONG lRy; /* y-axis rotation */
  39. LONG lRz; /* z-axis rotation */
  40. LONG rglSlider[2]; /* extra axes positions */
  41. DWORD rgdwPOV[4]; /* POV directions */
  42. BYTE rgbButtons[128]; /* 128 buttons */
  43. LONG lVX; /* x-axis velocity */
  44. LONG lVY; /* y-axis velocity */
  45. LONG lVZ; /* z-axis velocity */
  46. LONG lVRx; /* x-axis angular velocity */
  47. LONG lVRy; /* y-axis angular velocity */
  48. LONG lVRz; /* z-axis angular velocity */
  49. LONG rglVSlider[2]; /* extra axes velocities */
  50. LONG lAX; /* x-axis acceleration */
  51. LONG lAY; /* y-axis acceleration */
  52. LONG lAZ; /* z-axis acceleration */
  53. LONG lARx; /* x-axis angular acceleration */
  54. LONG lARy; /* y-axis angular acceleration */
  55. LONG lARz; /* z-axis angular acceleration */
  56. LONG rglASlider[2]; /* extra axes accelerations */
  57. LONG lFX; /* x-axis force */
  58. LONG lFY; /* y-axis force */
  59. LONG lFZ; /* z-axis force */
  60. LONG lFRx; /* x-axis torque */
  61. LONG lFRy; /* y-axis torque */
  62. LONG lFRz; /* z-axis torque */
  63. LONG rglFSlider[2]; /* extra axes forces */
  64. } JOYSTICKSTATE, *LPJOYSTICKSTATE;
  65. ////////////////////////////////////////////////////////////////////////
  66. /// 检测是否游戏杆库是否初始化
  67. JOYSTICKWIN32DLL_API bool IsJoystickInitialized();
  68. /// 初始化游戏杆设备以及DirectInput库,
  69. /// 参数:HWND,游戏杆相关联的窗口句柄
  70. /// 返回值:如果成功则返回S_OK(零值),失败则返回错误码(非零值)
  71. JOYSTICKWIN32DLL_API LRESULT InitDirectInput(HWND hwnd);
  72. /// 清理库,释放游戏杆设备
  73. JOYSTICKWIN32DLL_API VOID FreeDirectInput();
  74. /// 更新游戏杆状态
  75. /// 参数:LPJOYSTICKSTATE pstate指向数据结构JOYSTICKSTATE的指针
  76. /// 返回值:如果成功则返回S_OK(零值),失败则返回错误码(非零值)
  77. JOYSTICKWIN32DLL_API HRESULT UpdateInputState( LPJOYSTICKSTATE pstate);

this is the first release version----20080929.

Unity3D技术之键盘、操纵杆和游戏手柄输入实现详解

输入桌面 Unity 支持键盘、操纵杆和游戏手柄输入。 可以在输入管理器 (Input Manager) 中创建虚拟轴和按钮,终端用户可以在简洁美观的配置对话框中配置键盘。   您...
  • u012520952
  • u012520952
  • 2015年11月06日 12:21
  • 7070

游戏手柄(JoyStick)编程学习笔记(1)

游戏手柄(JoyStick)编程学习笔记(1)最近我开发的一个项目中需要用手柄控制一个二维移动平台的运动,找了些工业用的操作杆,感觉都挺丑的。后来想到打游戏时用的游戏手柄就挺漂亮,就决定试试用游戏手柄...
  • liyuanbhu
  • liyuanbhu
  • 2016年06月19日 21:07
  • 8098

android虚拟手柄摇杆的实现

最近的项目开发中的一个任务是实现Android虚拟手柄界面,如图所示: 界面是一个SurfaceView,摇杆和按键都是通过画图显示出来的,这里详细介摇杆的实现,当用户点击摇杆即中间的黄球时...
  • u013467735
  • u013467735
  • 2015年03月02日 14:11
  • 3113

STM32 JoystickMouse USB游戏杆鼠标的实现

本次程序的实现是基于上次CustomHID修稿过来的,工程的架构就不在介绍,这里主要介绍下,如何修改。 首先当然是usb_desc.c的一些描述符了。 设备描述符需要修改下bMaxPack...
  • u011318735
  • u011318735
  • 2013年12月20日 00:24
  • 2842

aframe.js 结合 gamepad api 游戏手柄摇杆移动摄像机实验

如果不使用游戏手柄,那么VR CARDBOARD等虚拟现实设备就像被挑断了经脉,行动不自由。 aframe.js可以非常快速的建构虚拟现实场景,只需要几行代码,一个让人仿若身临其境的新世界就将出现在...
  • MAILLIBIN
  • MAILLIBIN
  • 2017年11月22日 20:41
  • 216

android 如何使用surfaceview绘制类似游戏手柄的摇杆?

网上找到比较少关于此类的文章,估计是高手都比较忙,没空分享这样的东西。今天乘有空发表一下。 具体分3步: 1.创建一个holder,可以理解为我们美术生常用的画板架。 surfaceview的原...
  • helwens
  • helwens
  • 2011年12月26日 17:08
  • 1379

用API操作游戏杆

  • 2008年07月11日 20:29
  • 7KB
  • 下载

JoystickIn是DirctextX编程中经常用到的关于游戏杆操作的类

  • 2008年09月09日 09:02
  • 16KB
  • 下载

cocos2d-x 3.0来做一个简单的游戏教程 win32平台 vs2012 详细解释献给初学者们!

原代码来自于网络,由于3
  • adady
  • adady
  • 2014年05月04日 20:53
  • 2261

一个使用纯Win32 SDK和C语言实现的五子棋游戏

GobangGame这是一个使用纯Win32 SDK和C语言实现的五子棋游戏在这个游戏中实现的功能 [x] 绘制一个15 * 15的棋盘 [x] 绘制5个着重点位置 [x] 根据鼠标左键的点击,可以绘...
  • u012814856
  • u012814856
  • 2017年03月13日 00:03
  • 523
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个游戏设备的Win32库,游戏杆,摇杆,手柄操作
举报原因:
原因补充:

(最多只允许输入30个字)