InputSystem.cpp
Upload User: xuczgm
Upload Date: 2022-04-25
Package Size: 8601k
Code Size: 4k
Category:

Special Effects

Development Platform:

Visual C++

  1. #include "stdafx.h"
  2. #include "InputSystem.h"
  3. //DX输入系统
  4. CKeyboard::CKeyboard(LPDIRECTINPUT8 pDI, HWND hwnd)
  5. { FAILED(pDI->CreateDevice(GUID_SysKeyboard, &m_pDIDev, NULL));
  6.   FAILED(m_pDIDev->SetDataFormat(&c_dfDIKeyboard));
  7.   FAILED(m_pDIDev->SetCooperativeLevel(hwnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE));
  8.   FAILED(m_pDIDev->Acquire());
  9.   Clear();
  10. }
  11. CKeyboard::~CKeyboard()
  12. { if (m_pDIDev)
  13.   { m_pDIDev->Unacquire();
  14.     m_pDIDev->Release();
  15.   }
  16. }
  17. bool CKeyboard::Acquire()
  18. { Clear();
  19.   return (!FAILED(m_pDIDev->Acquire()));
  20. }
  21. bool CKeyboard::Unacquire()
  22. { Clear();
  23.   return (!FAILED(m_pDIDev->Unacquire()));
  24. }
  25. bool CKeyboard::Update()
  26. { if (FAILED(m_pDIDev->GetDeviceState(sizeof(m_keys), (LPVOID)m_keys)))
  27.   { if (FAILED(m_pDIDev->Acquire())) return false;
  28.     if (FAILED(m_pDIDev->GetDeviceState(sizeof(m_keys), (LPVOID)m_keys)))  return false;
  29.   }
  30.   return true;
  31. }
  32. CMouse::CMouse(LPDIRECTINPUT8 pDI, HWND hwnd, bool isExclusive)
  33. { FAILED(pDI->CreateDevice(GUID_SysMouse, &m_pDIDev, NULL));
  34.   FAILED(m_pDIDev->SetDataFormat(&c_dfDIMouse));
  35.   DWORD flags;
  36.   if (isExclusive)
  37.     flags = DISCL_FOREGROUND | DISCL_EXCLUSIVE | DISCL_NOWINKEY;
  38.   else
  39.     flags = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE;
  40.   FAILED(m_pDIDev->SetCooperativeLevel(hwnd, flags));
  41.   FAILED(m_pDIDev->Acquire());
  42.   FAILED(m_pDIDev->GetDeviceState(sizeof(DIMOUSESTATE), &m_state));
  43. }
  44. bool CMouse::Update()
  45. { if (FAILED(m_pDIDev->GetDeviceState(sizeof(DIMOUSESTATE), &m_state)))
  46.   { if (FAILED(m_pDIDev->Acquire()))  return false;
  47.     if (FAILED(m_pDIDev->GetDeviceState(sizeof(DIMOUSESTATE), &m_state)))  return false;
  48.   }
  49.   return true;
  50. }
  51. CMouse::~CMouse()
  52. { if (m_pDIDev)
  53.   { m_pDIDev->Unacquire();
  54.     m_pDIDev->Release();
  55.   }
  56. }
  57. bool CMouse::Acquire()
  58. {  return (!FAILED(m_pDIDev->Acquire()));
  59. }
  60. bool CMouse::Unacquire()
  61. {  return (!FAILED(m_pDIDev->Unacquire()));
  62. }
  63. CJoystick::CJoystick(LPDIRECTINPUT8 pDI, HINSTANCE appInstance)
  64. {}
  65. CJoystick::~CJoystick()
  66. { if (m_pDIDev)
  67.   { m_pDIDev->Unacquire();
  68.     m_pDIDev->Release();
  69.   }
  70. }
  71. bool CInputSystem::Initialize(HWND hwnd, HINSTANCE appInstance, bool isExclusive, DWORD flags)
  72. { m_pKeyboard = NULL; 
  73.   m_pMouse = NULL; 
  74.   m_pJoystick = NULL; 
  75.   if (FAILED(DirectInput8Create(appInstance,
  76.                                DIRECTINPUT_VERSION,
  77.                                IID_IDirectInput8,
  78.                                (void **)&m_pDI,
  79.                                NULL)))
  80.     return false;
  81.   if (flags & IS_USEKEYBOARD)
  82.   {  m_pKeyboard = new CKeyboard(m_pDI, hwnd);
  83.   }
  84.   if (flags & IS_USEMOUSE)
  85.   {  m_pMouse = new CMouse(m_pDI, hwnd, true);
  86.   }
  87.   if (flags & IS_USEJOYSTICK)
  88.   {  m_pJoystick = new CJoystick(m_pDI, appInstance);
  89.   }
  90.   return true;
  91. }
  92. bool CInputSystem::Shutdown()
  93. { UnacquireAll();
  94.   if (m_pKeyboard)
  95.   { delete m_pKeyboard;
  96.     m_pKeyboard = NULL;
  97.   }
  98.   if (m_pMouse)
  99.   { delete m_pMouse;
  100.     m_pMouse = NULL;
  101.   }
  102.   if (m_pJoystick)
  103.   { delete m_pJoystick;
  104.     m_pJoystick = NULL;
  105.   }
  106.   if (FAILED(m_pDI->Release()))  return false;
  107.   return true;
  108. }
  109. bool CInputSystem::Update()
  110. { if (m_pKeyboard)  m_pKeyboard->Update();
  111.   if (m_pMouse) m_pMouse->Update();
  112.   if (m_pJoystick)  m_pJoystick->Update();
  113.   return true;
  114. }
  115. void CInputSystem::AcquireAll()
  116. { if (m_pKeyboard)  m_pKeyboard->Acquire();
  117.   if (m_pMouse) m_pMouse->Acquire();
  118.   if (m_pJoystick)  m_pJoystick->Acquire();
  119. }
  120. void CInputSystem::UnacquireAll()
  121. { if (m_pKeyboard)  m_pKeyboard->Unacquire();
  122.   if (m_pMouse) m_pMouse->Unacquire();
  123.   if (m_pJoystick)  m_pJoystick->Unacquire();
  124. }
  125. bool CJoystick::Acquire()
  126. {  return (!FAILED(m_pDIDev->Acquire()));
  127. }
  128. bool CJoystick::Unacquire()
  129. {  return (!FAILED(m_pDIDev->Unacquire()));
  130. }
  131. bool CJoystick::Update()
  132. {  return true;
  133. }