home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / room3d / dinput.bas < prev    next >
Encoding:
BASIC Source File  |  1999-02-11  |  12.3 KB  |  340 lines

  1. Attribute VB_Name = "directInputmodule"
  2. 'This module contains procedures for using (initializing) mouse
  3. 'and Keyboard with DirectInput
  4. 'Taken from the D3DIM C-MATRIX samples (sorry they don't say the author)
  5. Option Explicit
  6. Global directInput As IDirectInputA
  7. Global Keyboarddevice2 As IDirectInputDevice2A
  8. Global KeyboardState(0 To 255) As Byte
  9. Global MouseDevice2 As IDirectInputDevice2A
  10. Global MouseState As DIMOUSESTATE
  11. 'This procedure creates a IdirectInputdevice2A for Keyboard
  12. 'which you can use in a rendering loop for example
  13. '''''''''''''
  14. 'This procedure needs
  15. 'An idirectInputObject(existing or non existing)
  16. 'An Idirectinputdevice2A
  17. 'A form class
  18. Public Function CreateDirectInputKeyboard(directInput As IDirectInputA, KeyboardDirectInputDevice2 As IDirectInputDevice2A, Form As Form) As Long
  19. On Error GoTo err
  20. Dim DirectInputKey As Win32.GUID
  21.  
  22. Dim Keyboarddidatafotmat As DIDATAFORMAT
  23. Dim Keyboarddirectinputobjectdataformat(0 To 255) As DIOBJECTDATAFORMAT
  24.  
  25. DirectInputKey.Data1 = &H55728220
  26. DirectInputKey.Data2 = &HD33C
  27. DirectInputKey.Data3 = &H11CF
  28. DirectInputKey.Data4(0) = &HBF
  29. DirectInputKey.Data4(1) = &HC7
  30. DirectInputKey.Data4(2) = &H44
  31. DirectInputKey.Data4(3) = &H45
  32. DirectInputKey.Data4(4) = &H53
  33. DirectInputKey.Data4(5) = &H54
  34. DirectInputKey.Data4(6) = 0
  35. DirectInputKey.Data4(7) = 0
  36. 'create the Data format
  37. Dim i As Long
  38. For i = 0 To 255
  39. Keyboarddirectinputobjectdataformat(i).dwOfs = i
  40. Keyboarddirectinputobjectdataformat(i).dwType = &H80000000 + DIDFT_BUTTON + i * 256&
  41. Keyboarddirectinputobjectdataformat(i).dwFlags = &H0
  42. Keyboarddirectinputobjectdataformat(i).pGUID = VarPtr(DirectInputKey)
  43. Next
  44.     
  45.     ' Keyboard data format
  46.  
  47. Keyboarddidatafotmat.dwSize = &H18
  48. Keyboarddidatafotmat.dwObjSize = &H10
  49. Keyboarddidatafotmat.dwFlags = 2
  50. Keyboarddidatafotmat.dwDataSize = &H100
  51. Keyboarddidatafotmat.dwNumObjs = &H100
  52. Keyboarddidatafotmat.rgodf = VarPtr(Keyboarddirectinputobjectdataformat(0))
  53. Dim oldnotusedKeyboardDirectInputDevice As IDirectInputDeviceA
  54.  
  55. 'create a Direct Input Object when it's nothing
  56. If directInput Is Nothing Then DirectInputCreateA ByVal App.hInstance, &H500, directInput, Nothing
  57.  
  58. Dim did As DIDEVICEINSTANCEA
  59. directInput.EnumDevices DIDEVTYPE_KEYBOARD, AddressOf enumdirectinputobjects, did, DIEDFL_ATTACHEDONLY
  60.  
  61. 'create a Keyboard Device
  62. directInput.CreateDevice did.guidInstance, oldnotusedKeyboardDirectInputDevice, Nothing
  63.  
  64. 'create Keyboard Device 2
  65. Set KeyboardDirectInputDevice2 = oldnotusedKeyboardDirectInputDevice
  66.  
  67. 'Set the dataformat to device
  68. KeyboardDirectInputDevice2.SetDataFormat Keyboarddidatafotmat
  69.  
  70. 'set the cooperative Level of device
  71. KeyboardDirectInputDevice2.SetCooperativeLevel Form.hWnd, DISCL_FOREGROUND Or DISCL_NONEXCLUSIVE
  72.  
  73. 'acquires the device
  74. KeyboardDirectInputDevice2.Acquire
  75. 'You can use the Keyboard device now as described in the fullscreen version of this sample
  76. Exit Function
  77. err:
  78. CreateDirectInputKeyboard = err.Number
  79. End Function
  80. 'This procedure creates a IdirectInputdevice2A for Mouse
  81. 'which you can use in a rendering loop for example
  82. '''''''''''''
  83. 'This procedure needs
  84. 'An IdirectInputObject(existing or non existing)
  85. 'An Idirectinputdevice2A
  86. 'A form class
  87. Public Function CreateDirectInputMouse(directInput As IDirectInputA, MouseDirectInputDevice2 As IDirectInputDevice2A, Form As Form) As Long
  88. On Error GoTo err
  89. Dim MouseX As Win32.GUID
  90. Dim MouseY As Win32.GUID
  91. Dim MouseZ As Win32.GUID
  92. Dim MouseButton As Win32.GUID
  93. Dim Mousedirectinputdataformat As DIDATAFORMAT
  94. Dim MouseDirectinputObject(0 To 6) As DIOBJECTDATAFORMAT
  95.  
  96. 'Guids defining
  97. MouseX.Data1 = &HA36D02E0
  98. MouseX.Data2 = &HC9F3
  99. MouseX.Data3 = &H11CF
  100. MouseX.Data4(0) = &HBF
  101. MouseX.Data4(1) = &HC7
  102. MouseX.Data4(2) = &H44
  103. MouseX.Data4(3) = &H45
  104. MouseX.Data4(4) = &H53
  105. MouseX.Data4(5) = &H54
  106. MouseX.Data4(6) = 0
  107. MouseX.Data4(7) = 0
  108.  
  109. MouseY = MouseX
  110. MouseY.Data1 = &HA36D02E1
  111.  
  112. MouseZ = MouseX
  113. MouseZ.Data1 = &HA36D02E2
  114.  
  115. MouseButton = MouseX
  116. MouseButton.Data1 = &HA36D02F0
  117.  
  118. 'create the Data format
  119.  ' Mouse objects array
  120.      MouseDirectinputObject(0).dwOfs = 0
  121.      MouseDirectinputObject(0).dwType = &HFFFF00 + DIDFT_AXIS
  122.      MouseDirectinputObject(0).dwFlags = 0
  123.      MouseDirectinputObject(0).pGUID = VarPtr(MouseX)
  124.      MouseDirectinputObject(1).dwOfs = 4
  125.      MouseDirectinputObject(1).dwType = &HFFFF00 + DIDFT_AXIS
  126.      MouseDirectinputObject(1).dwFlags = 0
  127.      MouseDirectinputObject(1).pGUID = VarPtr(MouseY)
  128.      MouseDirectinputObject(2).dwOfs = 8
  129.      MouseDirectinputObject(2).dwType = &H80FFFF00 + DIDFT_AXIS
  130.      MouseDirectinputObject(2).dwFlags = 0
  131.      MouseDirectinputObject(2).pGUID = VarPtr(MouseZ)
  132.     Dim i As Long
  133.     For i = 0 To 3
  134.     MouseDirectinputObject(3 + i).dwOfs = 12 + i
  135.     MouseDirectinputObject(3 + i).dwType = &HFFFF00 + DIDFT_BUTTON
  136.     If i = 2 Or i = 3 Then MouseDirectinputObject(3 + i).dwType = &H80000000 Or MouseDirectinputObject(3 + i).dwType
  137.     MouseDirectinputObject(3 + i).dwFlags = 0
  138.     MouseDirectinputObject(3 + i).pGUID = VarPtr(MouseButton)
  139.     Next
  140.     
  141.     ' Mouse data format
  142.     Mousedirectinputdataformat.dwSize = &H18
  143.     Mousedirectinputdataformat.dwObjSize = &H10
  144.     Mousedirectinputdataformat.dwFlags = 2
  145.     Mousedirectinputdataformat.dwDataSize = &H10
  146.     Mousedirectinputdataformat.dwNumObjs = 7
  147.     Mousedirectinputdataformat.rgodf = VarPtr(MouseDirectinputObject(0))
  148. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  149. Dim oldnotusedMouseDirectInputDevice As IDirectInputDeviceA
  150. 'create a Direct Input Object  when it's nothing
  151. If directInput Is Nothing Then DirectInputCreateA ByVal App.hInstance, &H500, directInput, Nothing
  152.  
  153. Dim did As DIDEVICEINSTANCEA
  154. directInput.EnumDevices DIDEVTYPE_MOUSE, AddressOf enumdirectinputobjects, did, DIEDFL_ATTACHEDONLY
  155.  
  156. 'create a Mouse Device
  157. directInput.CreateDevice did.guidInstance, oldnotusedMouseDirectInputDevice, Nothing
  158.  
  159. 'create a Mouse Device 2
  160. Set MouseDirectInputDevice2 = oldnotusedMouseDirectInputDevice
  161.  
  162. 'Set the dataformat to device
  163. MouseDirectInputDevice2.SetDataFormat Mousedirectinputdataformat
  164.  
  165. 'set the cooperative Level of device
  166. MouseDirectInputDevice2.SetCooperativeLevel Form.hWnd, DISCL_FOREGROUND Or DISCL_NONEXCLUSIVE
  167. 'acquires the device
  168. MouseDirectInputDevice2.Acquire
  169. 'you can use the mouse now
  170.  
  171. Exit Function
  172. err:
  173. CreateDirectInputMouse = err.Number
  174. End Function
  175.  
  176. Public Function CreateDirectInputJoystick(directInput As IDirectInputA, JoystickDirectInputDevice2 As IDirectInputDevice2A, Form As Form) As Long
  177. On Error GoTo err
  178.  
  179. Dim Joystickddidatafotmat As DIDATAFORMAT
  180. Dim Joystickdirectinputobjectdataformat(0 To 43) As DIOBJECTDATAFORMAT
  181.  
  182. Dim JoystickX As Win32.GUID
  183. Dim JoystickY As Win32.GUID
  184. Dim JoystickZ As Win32.GUID
  185. Dim JoystickRxAxis As Win32.GUID
  186. Dim JoystickRyAxis As Win32.GUID
  187. Dim JoystickRzAxis As Win32.GUID
  188. Dim JoystickSlider As Win32.GUID
  189. Dim JoystickPov As Win32.GUID
  190. Dim Joystickbutton As Win32.GUID
  191.  
  192. JoystickX.Data1 = &HA36D02E0
  193. JoystickX.Data2 = &HC9F3
  194. JoystickX.Data3 = &H11CF
  195. JoystickX.Data4(0) = &HBF
  196. JoystickX.Data4(1) = &HC7
  197. JoystickX.Data4(2) = &H44
  198. JoystickX.Data4(3) = &H45
  199. JoystickX.Data4(4) = &H53
  200. JoystickX.Data4(5) = &H54
  201. JoystickX.Data4(6) = 0
  202. JoystickX.Data4(7) = 0
  203.  
  204. JoystickY = JoystickX
  205. JoystickY.Data1 = &HA36D02E1
  206.  
  207. JoystickZ = JoystickX
  208. JoystickZ.Data1 = &HA36D02E2
  209.  
  210. JoystickRxAxis = JoystickX
  211. JoystickRxAxis.Data1 = &HA36D02F4
  212.  
  213. JoystickRyAxis = JoystickX
  214. JoystickRyAxis.Data1 = &HA36D02F5
  215.  
  216. JoystickRzAxis = JoystickX
  217. JoystickRzAxis.Data1 = &HA36D02E3
  218.  
  219. JoystickSlider = JoystickX
  220. JoystickSlider.Data1 = &HA36D02E4
  221.  
  222. JoystickPov = JoystickX
  223. JoystickPov.Data1 = &HA36D02F2
  224.  
  225. Joystickbutton = JoystickX
  226. Joystickbutton.Data1 = &HA36D02F0
  227.  
  228. Joystickdirectinputobjectdataformat(0).dwOfs = 0
  229. Joystickdirectinputobjectdataformat(0).dwType = &H80FFFF00 + DIDFT_AXIS
  230. Joystickdirectinputobjectdataformat(0).dwFlags = 1
  231. Joystickdirectinputobjectdataformat(0).pGUID = VarPtr(JoystickX)
  232.  
  233. Joystickdirectinputobjectdataformat(1).dwOfs = 4
  234. Joystickdirectinputobjectdataformat(1).dwType = &H80FFFF00 + DIDFT_AXIS
  235. Joystickdirectinputobjectdataformat(1).dwFlags = 1
  236. Joystickdirectinputobjectdataformat(1).pGUID = VarPtr(JoystickY)
  237.  
  238.  
  239. Joystickdirectinputobjectdataformat(2).dwOfs = 8
  240. Joystickdirectinputobjectdataformat(2).dwType = &H80FFFF00 + DIDFT_AXIS
  241. Joystickdirectinputobjectdataformat(2).dwFlags = 1
  242. Joystickdirectinputobjectdataformat(2).pGUID = VarPtr(JoystickZ)
  243.  
  244. Joystickdirectinputobjectdataformat(3).dwOfs = &HC
  245. Joystickdirectinputobjectdataformat(3).dwType = &H80FFFF00 + DIDFT_AXIS
  246. Joystickdirectinputobjectdataformat(3).dwFlags = 1
  247. Joystickdirectinputobjectdataformat(3).pGUID = VarPtr(JoystickRxAxis)
  248.  
  249. Joystickdirectinputobjectdataformat(4).dwOfs = &H10
  250. Joystickdirectinputobjectdataformat(4).dwType = &H80FFFF00 + DIDFT_AXIS
  251. Joystickdirectinputobjectdataformat(4).dwFlags = 1
  252. Joystickdirectinputobjectdataformat(4).pGUID = VarPtr(JoystickRyAxis)
  253.  
  254. Joystickdirectinputobjectdataformat(5).dwOfs = &H14
  255. Joystickdirectinputobjectdataformat(5).dwType = &H80FFFF00 + DIDFT_AXIS
  256. Joystickdirectinputobjectdataformat(5).dwFlags = 1
  257. Joystickdirectinputobjectdataformat(5).pGUID = VarPtr(JoystickRzAxis)
  258.  
  259. Joystickdirectinputobjectdataformat(6).dwOfs = &H18
  260. Joystickdirectinputobjectdataformat(6).dwType = &H80FFFF00 + DIDFT_AXIS
  261. Joystickdirectinputobjectdataformat(6).dwFlags = 1
  262. Joystickdirectinputobjectdataformat(6).pGUID = VarPtr(JoystickSlider)
  263.  
  264. Joystickdirectinputobjectdataformat(7).dwOfs = &H1C
  265. Joystickdirectinputobjectdataformat(7).dwType = &H80FFFF00 + DIDFT_AXIS
  266. Joystickdirectinputobjectdataformat(7).dwFlags = 1
  267. Joystickdirectinputobjectdataformat(7).pGUID = VarPtr(JoystickSlider)
  268.  
  269. Joystickdirectinputobjectdataformat(8).dwOfs = &H20
  270. Joystickdirectinputobjectdataformat(8).dwType = &H80FFFF00 + DIDFT_POV
  271. Joystickdirectinputobjectdataformat(8).dwFlags = 0
  272. Joystickdirectinputobjectdataformat(8).pGUID = VarPtr(JoystickPov)
  273.  
  274.  
  275. Joystickdirectinputobjectdataformat(9).dwOfs = &H24
  276. Joystickdirectinputobjectdataformat(9).dwType = &H80FFFF00 + DIDFT_POV
  277. Joystickdirectinputobjectdataformat(9).dwFlags = 0
  278. Joystickdirectinputobjectdataformat(9).pGUID = VarPtr(JoystickPov)
  279.  
  280. Joystickdirectinputobjectdataformat(10).dwOfs = &H28
  281. Joystickdirectinputobjectdataformat(10).dwType = &H80FFFF00 + DIDFT_POV
  282. Joystickdirectinputobjectdataformat(10).dwFlags = 0
  283. Joystickdirectinputobjectdataformat(10).pGUID = VarPtr(JoystickPov)
  284.  
  285.  
  286. Joystickdirectinputobjectdataformat(11).dwOfs = &H2C
  287. Joystickdirectinputobjectdataformat(11).dwType = &H80FFFF00 + DIDFT_POV
  288. Joystickdirectinputobjectdataformat(11).dwFlags = 0
  289. Joystickdirectinputobjectdataformat(11).pGUID = VarPtr(JoystickPov)
  290.  
  291. Dim i As Long
  292. For i = 0 To 31
  293. Joystickdirectinputobjectdataformat(12 + i).dwOfs = &H30 + i
  294. Joystickdirectinputobjectdataformat(12 + i).dwType = &H80FFFF00 + DIDFT_BUTTON
  295. Joystickdirectinputobjectdataformat(12 + i).dwFlags = 0
  296. Joystickdirectinputobjectdataformat(12 + i).pGUID = VarPtr(Joystickbutton)
  297. Next
  298.     ' Joystick data format
  299. Joystickddidatafotmat.dwSize = &H18
  300. Joystickddidatafotmat.dwObjSize = &H10
  301. Joystickddidatafotmat.dwFlags = 1
  302. Joystickddidatafotmat.dwDataSize = &H50
  303. Joystickddidatafotmat.dwNumObjs = &H2C
  304. Joystickddidatafotmat.rgodf = VarPtr(Joystickdirectinputobjectdataformat(0))
  305.  
  306.     
  307.  
  308. Dim oldnotusedJoystickDirectInputDevice As IDirectInputDeviceA
  309.  
  310. 'create a Direct Input Object when it's nothing
  311. If directInput Is Nothing Then DirectInputCreateA ByVal App.hInstance, &H500, directInput, Nothing
  312.  
  313. Dim did As DIDEVICEINSTANCEA
  314. directInput.EnumDevices DIDEVTYPE_JOYSTICK, AddressOf enumdirectinputobjects, did, DIEDFL_ATTACHEDONLY
  315.  
  316. 'create a joystick Device
  317. directInput.CreateDevice did.guidInstance, oldnotusedJoystickDirectInputDevice, Nothing
  318.  
  319. 'create joystick Device 2
  320. Set JoystickDirectInputDevice2 = oldnotusedJoystickDirectInputDevice
  321.  
  322. 'Set the dataformat to device
  323. JoystickDirectInputDevice2.SetDataFormat Joystickddidatafotmat
  324.  
  325. 'set the cooperative Level of device
  326. JoystickDirectInputDevice2.SetCooperativeLevel Form.hWnd, DISCL_FOREGROUND Or DISCL_NONEXCLUSIVE
  327.  
  328. 'acquires the device
  329. JoystickDirectInputDevice2.Acquire
  330. 'You can use the joystick device now as described in the fullscreen version of this sample
  331. Exit Function
  332. err:
  333. CreateDirectInputJoystick = err.Number
  334. End Function
  335. Function enumdirectinputobjects(ddi As DIDEVICEINSTANCEA, results As DIDEVICEINSTANCEA) As Long
  336.     results = ddi
  337.     enumdirectinputobjects = DIENUM_STOP
  338. End Function
  339.  
  340.