My_DirectInput.cpp
上传用户:may_xy
上传日期:2007-08-09
资源大小:1519k
文件大小:4k
源码类别:

游戏

开发平台:

C/C++

  1. // My_DirectInput.cpp: implementation of the CMyDirectInput class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "斗地主.h"
  6. #include "MainFrm.h"
  7. #include "Game.h"
  8. #include "My_directdraw.h"
  9. #include "My_DirectInput.h"
  10. #ifdef _DEBUG
  11. #undef THIS_FILE
  12. static char THIS_FILE[]=__FILE__;
  13. #define new DEBUG_NEW
  14. #endif
  15. //////////////////////////////////////////////////////////////////////
  16. // Construction/Destruction
  17. //////////////////////////////////////////////////////////////////////
  18. CMyDirectInput::CMyDirectInput()
  19. {
  20. pDI = NULL;       
  21. pDI_Keyborad = NULL; 
  22. pDI_Mouse = NULL; 
  23. }
  24. CMyDirectInput::~CMyDirectInput()
  25. {
  26. if(pDI_Keyborad)
  27. {
  28. pDI_Keyborad->Release();
  29. pDI_Keyborad = NULL;
  30. }
  31. if(pDI_Mouse)
  32. {
  33. pDI_Mouse->Release();
  34. pDI_Mouse = NULL;
  35. }
  36. if(pDI)
  37. {
  38. pDI->Release();
  39. pDI = NULL;
  40. }
  41. }
  42. int CMyDirectInput::KeyboradInit()
  43. {
  44. HINSTANCE hinst = AfxGetInstanceHandle(); //得到程序实例句柄;
  45. //取得DirectInput组件接口;
  46. result = DirectInputCreateEx(hinst, DIRECTINPUT_VERSION, 
  47.         IID_IDirectInput7, (void**)&pDI, NULL);
  48. if(result != DI_OK)
  49. {
  50. AfxMessageBox("建立 DirectInput 对象失败!");
  51. }
  52. //建立键盘设备;
  53. result = pDI->CreateDeviceEx(GUID_SysKeyboard,
  54.  IID_IDirectInputDevice7,
  55.  (void**)&pDI_Keyborad,
  56.  NULL); 
  57. if(result != DI_OK)
  58. {
  59. AfxMessageBox("建立键盘输入设备失败!");
  60. }
  61. //设置数据格式;
  62. result = pDI_Keyborad->SetDataFormat(&c_dfDIKeyboard);
  63. if(result != DI_OK)
  64. {
  65. AfxMessageBox("设定数据格式失败!");
  66. }
  67. result = pDI_Keyborad->SetCooperativeLevel(pCMainFrame->m_hWnd, 
  68. DISCL_BACKGROUND | DISCL_NONEXCLUSIVE);
  69. if(result != DI_OK)
  70. {
  71. AfxMessageBox("设定程序协调层级失败!");
  72. }
  73. result = pDI_Keyborad->Acquire(); 
  74. if(result != DI_OK)
  75. {
  76. AfxMessageBox("取用输入设备失败!");
  77. }
  78. // TODO: Add your specialized creation code here
  79. return 1;
  80. }
  81. int CMyDirectInput::MouseInit()
  82. {
  83. HINSTANCE hinst = AfxGetInstanceHandle();  
  84. result = DirectInputCreateEx(hinst, DIRECTINPUT_VERSION, 
  85.         IID_IDirectInput7, (void**)&pDI, NULL); 
  86. if(result != DI_OK)
  87. {
  88. AfxMessageBox("建立 DirectInput 对象失败!");
  89. return 0;
  90. }
  91. result = pDI->CreateDeviceEx(GUID_SysMouse,
  92.  IID_IDirectInputDevice7,
  93.  (void**)&pDI_Mouse,
  94.  NULL); 
  95. if(result != DI_OK)
  96. {
  97. AfxMessageBox("建立鼠标输入装置失败!");
  98. return 0;
  99. }
  100. result = pDI_Mouse->SetDataFormat(&c_dfDIMouse2);
  101. if(result != DI_OK)
  102. {
  103. AfxMessageBox("设定数据格式失败!");
  104. return 0;
  105. }
  106. result = pDI_Mouse->SetCooperativeLevel(pCMainFrame->m_hWnd, 
  107.                    DISCL_BACKGROUND | DISCL_NONEXCLUSIVE); 
  108. if(result != DI_OK)
  109. {
  110. AfxMessageBox("设定程序协调层级失败!");
  111. return 0;
  112. }
  113. result = pDI_Mouse->Acquire();
  114. if(result != DI_OK)
  115. {
  116. AfxMessageBox("取用输入设备失败!");
  117. return 0;
  118. }
  119. // TODO: Add your specialized creation code here
  120. return 1;
  121. }
  122. //检查是否在CRect中有鼠标左键按下,如果有,返回1,否则返回0;
  123. int CMyDirectInput::IsLButtonDown(const CRect& rect)
  124. {
  125. CPoint point;
  126. DIMOUSESTATE2 MState;
  127. HRESULT result = pDI_Mouse->GetDeviceState(sizeof(DIMOUSESTATE2),(LPVOID)&MState);
  128. if(result != DI_OK )
  129. {
  130. AfxMessageBox("取得鼠标状态失败!");
  131. return -1;
  132. }
  133. if(MState.rgbButtons[0] & 0x80)  //如果点击键右键的处理情况;
  134. {
  135. ::GetCursorPos(&point);
  136. if(point.x >= rect.left &&
  137.    point.x <= rect.right &&
  138.    point.y >= rect.top &&
  139.    point.y <= rect.bottom )
  140. {
  141. return 1;
  142. }
  143. }
  144. return 0;
  145. }
  146. //检查是否在CRect中有鼠标右键按下,如果有,返回1,否则返回0;
  147. int CMyDirectInput::IsRButtonDown(const CRect& rect)
  148. {
  149. CPoint point;
  150. DIMOUSESTATE2 MState;
  151. HRESULT result = pDI_Mouse->GetDeviceState(sizeof(DIMOUSESTATE2),(LPVOID)&MState);
  152. if(result != DI_OK )
  153. {
  154. AfxMessageBox("取得鼠标状态失败!");
  155. return -1;
  156. }
  157. if(MState.rgbButtons[1] & 0x80)  //如果点击键右键的处理情况;
  158. {
  159. ::GetCursorPos(&point);
  160. if(point.x >= rect.left &&
  161.    point.x <= rect.right &&
  162.    point.y >= rect.top &&
  163.    point.y <= rect.bottom )
  164. {
  165. return 1;
  166. }
  167. }
  168. return 0;
  169. }