?? input.cpp
字號:
#include "input.h"
#define SAFE_RELEASE(p) {if (p) { p->Release(); p = NULL;}}
CInput::CInput(void)
{
m_pDirectInput = NULL;
m_pKeyboard = NULL;
m_pMouse = NULL;
memset((void*)m_KeyboardState,0,sizeof(m_KeyboardState));
}
CInput::~CInput(void)
{
Destroy();
}
HRESULT CInput::Create(HWND hWnd, HINSTANCE hInstance)
{
/*
SetCooperativeLevel函數,它的第二個參數由兩部分構成,第一部分用于指定是
前臺訪問還是后臺訪問(DISCL_FOREGROUND或DISCL_BACKGROUND),第二部分用于指
定是獨占還是非獨占模式(DISCL_EXCLUSIVE或DISCL_NONEXCLUSIVE)。下面是這
四個標識所代表的意義:
DISCL_FOREGROUND:輸入設備處于前臺(有焦點)時可訪問,處于后臺時失去設備獲取。
DISCL_BACKGROUND:輸入設備處于前臺、后臺時均可訪問。
DISCL_EXCLUSIVE:獨占模式,一旦得到準許,在獲取設備時其它程序便不能獨占此設備。
DISCL_NONEXCLUSIVE:非獨占模式,這時對該設備的訪問將不會因其它應用程序對該設備的使用而受到干擾。
*/
if(FAILED(DirectInput8Create(hInstance, DIRECTINPUT_VERSION,
IID_IDirectInput8, (void**)&m_pDirectInput, NULL)))
{
return E_FAIL;
}
// KEYBOARD
if(FAILED(m_pDirectInput->CreateDevice(GUID_SysKeyboard, &m_pKeyboard, NULL)))
{
Destroy();
return E_FAIL;
}
if(FAILED(m_pKeyboard->SetDataFormat(&c_dfDIKeyboard)))
{
Destroy();
return E_FAIL;
}
if(FAILED(m_pKeyboard->SetCooperativeLevel(hWnd, DISCL_BACKGROUND | DISCL_NONEXCLUSIVE)))
{
Destroy();
return E_FAIL;
}
if(m_pKeyboard)
{
m_pKeyboard->Acquire();
}
// MOUSE
if(FAILED(m_pDirectInput->CreateDevice(GUID_SysMouse, &m_pMouse, NULL)))
{
Destroy();
return E_FAIL;
}
if(FAILED(m_pMouse->SetDataFormat(&c_dfDIMouse)))
{
Destroy();
return E_FAIL;
}
if(FAILED(m_pMouse->SetCooperativeLevel(hWnd, DISCL_BACKGROUND | DISCL_NONEXCLUSIVE)))
{
Destroy();
return E_FAIL;
}
if(m_pMouse)
{
m_pMouse->Acquire();
}
return S_OK;
}
HRESULT CInput::GetKeyboardState()
{
memcpy((void*)m_Buffer,(void*)m_KeyboardState,sizeof(m_Buffer));
if(FAILED(m_pKeyboard->GetDeviceState(sizeof(m_KeyboardState),(LPVOID)m_KeyboardState)))
{
return E_FAIL;
}
return S_OK;
}
bool CInput::IsKeyDown(int key)
{
return (m_KeyboardState[key] & 0x80);
}
bool CInput::IsKeyDownToggle(int key)
{
return ((m_KeyboardState[key] & 0x80) && !(m_Buffer[key] & 0x80));
}
HRESULT CInput::GetMouseState()
{
if(FAILED(m_pMouse->GetDeviceState(sizeof(m_MouseState),(LPVOID)&m_MouseState)))
{
return E_FAIL;
}
return S_OK;
}
int CInput::IsMouseDown(int key)
{
return (m_MouseState.rgbButtons[key] & 0x80);
}
void CInput::GetCursorPos(long& x,long& y,long& z)
{
x = m_MouseState.lX;
y = m_MouseState.lY;
z = m_MouseState.lZ;
}
void CInput::Destroy()
{
if(m_pKeyboard)
{
m_pKeyboard->Unacquire();
}
if(m_pMouse)
{
m_pMouse->Unacquire();
}
SAFE_RELEASE(m_pMouse);
SAFE_RELEASE(m_pKeyboard);
SAFE_RELEASE(m_pDirectInput);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -