INPUTSYSTEM.CPP
Upload User: nthssl
Upload Date: 2022-04-05
Package Size: 25357k
Code Size: 4k
Category:

OpenCV

Development Platform:

Visual C++

  1. #include "InputSystem.h"
  2. CKeyboard::CKeyboard(LPDIRECTINPUT8 pDI, HWND hwnd)
  3. {
  4.   if (FAILED(pDI->CreateDevice(GUID_SysKeyboard, &m_pDIDev, NULL)))
  5.   {
  6.     // error processing
  7.   }
  8.   if (FAILED(m_pDIDev->SetDataFormat(&c_dfDIKeyboard)))
  9.   {
  10.     // error processing
  11.   }
  12.   if (FAILED(m_pDIDev->SetCooperativeLevel(hwnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE)))
  13.   {
  14.     // error processing
  15.   }
  16.   if (FAILED(m_pDIDev->Acquire()))
  17.   {
  18.     // error processing
  19.   }
  20.   Clear();
  21. }
  22. CKeyboard::~CKeyboard()
  23. {
  24.   if (m_pDIDev)
  25.   {
  26.     m_pDIDev->Unacquire();
  27.     m_pDIDev->Release();
  28.   }
  29. }
  30. bool CKeyboard::Acquire()
  31. {
  32.   Clear();
  33.   return (!FAILED(m_pDIDev->Acquire()));
  34. }
  35. bool CKeyboard::Unacquire()
  36. {
  37.   Clear();
  38.   return (!FAILED(m_pDIDev->Unacquire()));
  39. }
  40. bool CKeyboard::Update()
  41. {
  42.   if (FAILED(m_pDIDev->GetDeviceState(sizeof(m_keys), (LPVOID)m_keys)))
  43.   {
  44.     if (FAILED(m_pDIDev->Acquire()))
  45.     {
  46.       return false;
  47.     }
  48.     if (FAILED(m_pDIDev->GetDeviceState(sizeof(m_keys), (LPVOID)m_keys)))
  49.     {
  50.       return false;
  51.     }
  52.   }
  53.   return true;
  54. }
  55. CMouse::CMouse(LPDIRECTINPUT8 pDI, HWND hwnd, bool isExclusive)
  56. {
  57.   if (FAILED(pDI->CreateDevice(GUID_SysMouse, &m_pDIDev, NULL)))
  58.   {
  59.     // error processing
  60.   }
  61.   if (FAILED(m_pDIDev->SetDataFormat(&c_dfDIMouse)))
  62.   {
  63.     // error processing
  64.   }
  65.   DWORD flags;
  66.   if (isExclusive)
  67.     flags = DISCL_FOREGROUND | DISCL_EXCLUSIVE | DISCL_NOWINKEY;
  68.   else
  69.     flags = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE;
  70.   if (FAILED(m_pDIDev->SetCooperativeLevel(hwnd, flags)))
  71.   {
  72.     // error processing
  73.   }
  74.   if (FAILED(m_pDIDev->Acquire()))
  75.   {
  76.     // error processing
  77.   }
  78.   if (FAILED(m_pDIDev->GetDeviceState(sizeof(DIMOUSESTATE), &m_state)))
  79.   {
  80.     // error processing
  81.   }
  82. }
  83. bool CMouse::Update()
  84. {
  85.   if (FAILED(m_pDIDev->GetDeviceState(sizeof(DIMOUSESTATE), &m_state)))
  86.   {
  87.     if (FAILED(m_pDIDev->Acquire()))
  88.     {
  89.       return false;
  90.     }
  91.     if (FAILED(m_pDIDev->GetDeviceState(sizeof(DIMOUSESTATE), &m_state)))
  92.     {
  93.       return false;
  94.     }
  95.   }
  96.   return true;
  97. }
  98. CMouse::~CMouse()
  99. {
  100.   if (m_pDIDev)
  101.   {
  102.     m_pDIDev->Unacquire();
  103.     m_pDIDev->Release();
  104.   }
  105. }
  106. bool CMouse::Acquire()
  107. {
  108.   return (!FAILED(m_pDIDev->Acquire()));
  109. }
  110. bool CMouse::Unacquire()
  111. {
  112.   return (!FAILED(m_pDIDev->Unacquire()));
  113. }
  114. CJoystick::CJoystick(LPDIRECTINPUT8 pDI, HINSTANCE appInstance)
  115. {
  116. }
  117. CJoystick::~CJoystick()
  118. {
  119.   if (m_pDIDev)
  120.   {
  121.     m_pDIDev->Unacquire();
  122.     m_pDIDev->Release();
  123.   }
  124. }
  125. bool CInputSystem::Initialize(HWND hwnd, HINSTANCE appInstance, bool isExclusive, DWORD flags)
  126. {
  127.   m_pKeyboard = NULL; 
  128.   m_pMouse = NULL; 
  129.   m_pJoystick = NULL; 
  130.   if (FAILED(DirectInput8Create(appInstance,
  131.                                DIRECTINPUT_VERSION,
  132.                                IID_IDirectInput8,
  133.                                (void **)&m_pDI,
  134.                                NULL)))
  135.     return false;
  136.   if (flags & IS_USEKEYBOARD)
  137.   {
  138.     m_pKeyboard = new CKeyboard(m_pDI, hwnd);
  139.   }
  140.   if (flags & IS_USEMOUSE)
  141.   {
  142.     m_pMouse = new CMouse(m_pDI, hwnd, true);
  143.   }
  144.   if (flags & IS_USEJOYSTICK)
  145.   {
  146.     m_pJoystick = new CJoystick(m_pDI, appInstance);
  147.   }
  148.   return true;
  149. }
  150. bool CInputSystem::Shutdown()
  151. {
  152.   UnacquireAll();
  153.   if (m_pKeyboard)
  154.   {
  155.     delete m_pKeyboard;
  156.     m_pKeyboard = NULL;
  157.   }
  158.   if (m_pKeyboard)
  159.   {
  160.     delete m_pMouse;
  161.     m_pMouse = NULL;
  162.   }
  163.   if (m_pJoystick)
  164.   {
  165.     delete m_pJoystick;
  166.     m_pJoystick = NULL;
  167.   }
  168.   if (FAILED(m_pDI->Release()))
  169.     return false;
  170.   return true;
  171. }
  172. bool CInputSystem::Update()
  173. {
  174.   if (m_pKeyboard)
  175.     m_pKeyboard->Update();
  176.   if (m_pMouse)
  177.     m_pMouse->Update();
  178.   if (m_pJoystick)
  179.     m_pJoystick->Update();
  180.   return true;
  181. }
  182. void CInputSystem::AcquireAll()
  183. {
  184.   if (m_pKeyboard)
  185.     m_pKeyboard->Acquire();
  186.   if (m_pMouse)
  187.     m_pMouse->Acquire();
  188.   if (m_pJoystick)
  189.     m_pJoystick->Acquire();
  190. }
  191. void CInputSystem::UnacquireAll()
  192. {
  193.   if (m_pKeyboard)
  194.     m_pKeyboard->Unacquire();
  195.   if (m_pMouse)
  196.     m_pMouse->Unacquire();
  197.   if (m_pJoystick)
  198.     m_pJoystick->Unacquire();
  199. }
  200. bool CJoystick::Acquire()
  201. {
  202.   return (!FAILED(m_pDIDev->Acquire()));
  203. }
  204. bool CJoystick::Unacquire()
  205. {
  206.   return (!FAILED(m_pDIDev->Unacquire()));
  207. }
  208. bool CJoystick::Update()
  209. {
  210.   return true;
  211. }