📄 input.cpp
字号:
#include "Input.h"
#define SAFE_RELEASE(p) {if(p){(p)->Release();(p)=NULL;}}
HRESULT DXInput::InitInput(HWND hWnd, HINSTANCE hInst)
{
HRESULT hr;
if(FAILED(DirectInput8Create(hInst, //程序实例句柄
DIRECTINPUT_VERSION, //DirectInput版本号
IID_IDirectInput8, //接口的唯一标识符
(void**)&m_pDInput,
NULL)))
return E_FAIL;
//初始化键盘
if(FAILED(m_pDInput->CreateDevice(GUID_SysKeyboard, //键盘的全局唯一标识符
&m_pDInputDeviceKeyboard, //键盘的设备指针
NULL)))
{
return E_FAIL;
}
if(FAILED(m_pDInputDeviceKeyboard->SetCooperativeLevel(hWnd,DISCL_FOREGROUND|DISCL_NONEXCLUSIVE)))
{
SAFE_RELEASE(m_pDInputDeviceKeyboard);
return E_FAIL;
}
/*----------------------------------------------------------------------
DISCL_BACKGROUND 后台:即使所属的窗口不是活动窗口,仍然可取得输入设备的数据
DISCL_FOREGROUND 前台:只有当窗口处于前台时,输入设备才能输入数据
DISCL_EXCLUSIVE 独占式:独占输入设备
DISCL_NONEXCLUSIVE 非独占式:非独占输入设备
----------------------------------------------------------------------*/
if(FAILED(m_pDInputDeviceKeyboard->SetDataFormat(&c_dfDIKeyboard)))
{
SAFE_RELEASE(m_pDInputDeviceKeyboard);
return E_FAIL;
}
m_pDInputDeviceKeyboard->Acquire();
//初始化鼠标
if(FAILED(m_pDInput->CreateDevice(GUID_SysMouse,&m_pMouse,NULL)))
{
return E_FAIL;
}
if(FAILED(m_pMouse->SetDataFormat(&c_dfDIMouse)))
{
SAFE_RELEASE(m_pMouse);
return E_FAIL;
}
if(FAILED(hr = m_pMouse->SetCooperativeLevel(hWnd,DISCL_FOREGROUND|DISCL_NONEXCLUSIVE)))
{
if(hr == DIERR_UNSUPPORTED)
MessageBox(NULL, TEXT("协作等级不支持"),TEXT("ERROR"),MB_OK);
SAFE_RELEASE(m_pMouse);
return E_FAIL;
}
hr = m_pMouse->Acquire();
if( hr == DIERR_OTHERAPPHASPRIO || hr == DIERR_NOTACQUIRED )
{
MessageBox(NULL,TEXT("不能获得鼠标"),TEXT("error"),MB_OK);
return E_FAIL;
}
return S_OK;
}
void DXInput::UpdateInput()
{
HRESULT hr;
ZeroMemory(keyState,sizeof(keyState));
hr = m_pDInputDeviceKeyboard->GetDeviceState(sizeof(keyState),keyState);
if(hr==DIERR_INPUTLOST)
{
m_pDInputDeviceKeyboard->Acquire();
m_pDInputDeviceKeyboard->GetDeviceState(sizeof(keyState),keyState);
}
//float dx,dy,dz;
ZeroMemory(&mousestate,sizeof(mousestate));
hr = m_pMouse->GetDeviceState(sizeof(DIMOUSESTATE),(LPVOID)&mousestate);
if(hr==DIERR_INPUTLOST)
{
m_pMouse->Acquire();
m_pMouse->GetDeviceState(sizeof(DIMOUSESTATE),(LPVOID)&mousestate);
}
}
//获得鼠标的移动量
LONG DXInput::GetMouseMove(DWORD Axis)
{
if(Axis == MOUSE_X)
return mousestate.lX;
if(Axis == MOUSE_Y)
return mousestate.lY;
if(Axis == MOUSE_Z)
return mousestate.lZ;
}
bool DXInput::GetMouseButton(DWORD button)
{
if(button == LBUTTON)
return (mousestate.rgbButtons[0] & 0x80 ? true : false);
if(button == RBUTTON)
return (mousestate.rgbButtons[1] & 0x80 ? true : false);
if(button == MBUTTON)
return (mousestate.rgbButtons[2] & 0x80 ? true : false);
}
bool DXInput::GetKeyboard(DWORD key)
{
return keyState[key]&0x80 ? true : false;
}
void DXInput::Release()
{
if(m_pMouse)
{
m_pMouse->Unacquire();
SAFE_RELEASE(m_pMouse);
}
if(m_pDInputDeviceKeyboard)
{
m_pDInputDeviceKeyboard->Unacquire();
SAFE_RELEASE(m_pDInputDeviceKeyboard);
}
if(m_pDInput){ SAFE_RELEASE(m_pDInput); }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -