📄 inputsystem.cpp
字号:
#include "InputSystem.h"
CKeyboard::CKeyboard(LPDIRECTINPUT8 pDI, HWND hwnd)
{
if (FAILED(pDI->CreateDevice(GUID_SysKeyboard, &m_pDIDev, NULL)))
{
// error processing
}
if (FAILED(m_pDIDev->SetDataFormat(&c_dfDIKeyboard)))
{
// error processing
}
if (FAILED(m_pDIDev->SetCooperativeLevel(hwnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE)))
{
// error processing
}
if (FAILED(m_pDIDev->Acquire()))
{
// error processing
}
Clear();
}
CKeyboard::~CKeyboard()
{
if (m_pDIDev)
{
m_pDIDev->Unacquire();
m_pDIDev->Release();
}
}
bool CKeyboard::Acquire()
{
Clear();
return (!FAILED(m_pDIDev->Acquire()));
}
bool CKeyboard::Unacquire()
{
Clear();
return (!FAILED(m_pDIDev->Unacquire()));
}
bool CKeyboard::Update()
{
if (FAILED(m_pDIDev->GetDeviceState(sizeof(m_keys), (LPVOID)m_keys)))
{
if (FAILED(m_pDIDev->Acquire()))
{
return false;
}
if (FAILED(m_pDIDev->GetDeviceState(sizeof(m_keys), (LPVOID)m_keys)))
{
return false;
}
}
return true;
}
CMouse::CMouse(LPDIRECTINPUT8 pDI, HWND hwnd, bool isExclusive)
{
if (FAILED(pDI->CreateDevice(GUID_SysMouse, &m_pDIDev, NULL)))
{
// error processing
}
if (FAILED(m_pDIDev->SetDataFormat(&c_dfDIMouse)))
{
// error processing
}
DWORD flags;
if (isExclusive)
flags = DISCL_FOREGROUND | DISCL_EXCLUSIVE | DISCL_NOWINKEY;
else
flags = DISCL_FOREGROUND | DISCL_NONEXCLUSIVE;
if (FAILED(m_pDIDev->SetCooperativeLevel(hwnd, flags)))
{
// error processing
}
if (FAILED(m_pDIDev->Acquire()))
{
// error processing
}
if (FAILED(m_pDIDev->GetDeviceState(sizeof(DIMOUSESTATE), &m_state)))
{
// error processing
}
}
bool CMouse::Update()
{
if (FAILED(m_pDIDev->GetDeviceState(sizeof(DIMOUSESTATE), &m_state)))
{
if (FAILED(m_pDIDev->Acquire()))
{
return false;
}
if (FAILED(m_pDIDev->GetDeviceState(sizeof(DIMOUSESTATE), &m_state)))
{
return false;
}
}
return true;
}
CMouse::~CMouse()
{
if (m_pDIDev)
{
m_pDIDev->Unacquire();
m_pDIDev->Release();
}
}
bool CMouse::Acquire()
{
return (!FAILED(m_pDIDev->Acquire()));
}
bool CMouse::Unacquire()
{
return (!FAILED(m_pDIDev->Unacquire()));
}
CJoystick::CJoystick(LPDIRECTINPUT8 pDI, HINSTANCE appInstance)
{
}
CJoystick::~CJoystick()
{
if (m_pDIDev)
{
m_pDIDev->Unacquire();
m_pDIDev->Release();
}
}
bool CInputSystem::Initialize(HWND hwnd, HINSTANCE appInstance, bool isExclusive, DWORD flags)
{
m_pKeyboard = NULL;
m_pMouse = NULL;
m_pJoystick = NULL;
if (FAILED(DirectInput8Create(appInstance,
DIRECTINPUT_VERSION,
IID_IDirectInput8,
(void **)&m_pDI,
NULL)))
return false;
if (flags & IS_USEKEYBOARD)
{
m_pKeyboard = new CKeyboard(m_pDI, hwnd);
}
if (flags & IS_USEMOUSE)
{
m_pMouse = new CMouse(m_pDI, hwnd, true);
}
if (flags & IS_USEJOYSTICK)
{
m_pJoystick = new CJoystick(m_pDI, appInstance);
}
return true;
}
bool CInputSystem::Shutdown()
{
UnacquireAll();
if (m_pKeyboard)
{
delete m_pKeyboard;
m_pKeyboard = NULL;
}
if (m_pKeyboard)
{
delete m_pMouse;
m_pMouse = NULL;
}
if (m_pJoystick)
{
delete m_pJoystick;
m_pJoystick = NULL;
}
if (FAILED(m_pDI->Release()))
return false;
return true;
}
bool CInputSystem::Update()
{
if (m_pKeyboard)
m_pKeyboard->Update();
if (m_pMouse)
m_pMouse->Update();
if (m_pJoystick)
m_pJoystick->Update();
return true;
}
void CInputSystem::AcquireAll()
{
if (m_pKeyboard)
m_pKeyboard->Acquire();
if (m_pMouse)
m_pMouse->Acquire();
if (m_pJoystick)
m_pJoystick->Acquire();
}
void CInputSystem::UnacquireAll()
{
if (m_pKeyboard)
m_pKeyboard->Unacquire();
if (m_pMouse)
m_pMouse->Unacquire();
if (m_pJoystick)
m_pJoystick->Unacquire();
}
bool CJoystick::Acquire()
{
return (!FAILED(m_pDIDev->Acquire()));
}
bool CJoystick::Unacquire()
{
return (!FAILED(m_pDIDev->Unacquire()));
}
bool CJoystick::Update()
{
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -