📄 cginput.cpp
字号:
#include "CGInput.h"
CGInput* CGInput::mInstance=0;
CGInput* CGInput::GetInstance()
{
static CGInput single;
if(!mInstance)
mInstance=&single;
return mInstance;
}
CGInput::CGInput()
{
hr = 0;
dwCoopFlags = 0;
g_pDI = NULL;
g_pKeyboard = NULL;
ZeroMemory(&mKeyDown,sizeof(KeyDown));
}
CGInput::~CGInput()
{
if( g_pKeyboard )
g_pKeyboard->Unacquire();
SAFE_RELEASE(g_pKeyboard)
SAFE_RELEASE(g_pDI)
}
HRESULT CGInput::OnCreateDevice(HINSTANCE hInstance,HWND hWnd)
{
mHwnd=hWnd;
if( FAILED( hr = DirectInput8Create( hInstance, DIRECTINPUT_VERSION,
IID_IDirectInput8, (VOID**)&g_pDI, NULL ) ) )
return hr;
if( FAILED( hr = g_pDI->CreateDevice( GUID_SysKeyboard, &g_pKeyboard, NULL ) ) )
return hr;
if( FAILED( hr = g_pKeyboard->SetDataFormat( &c_dfDIKeyboard ) ) )
return hr;
hr = g_pKeyboard->SetCooperativeLevel( mHwnd, DISCL_FOREGROUND| DISCL_NONEXCLUSIVE);
g_pKeyboard->Acquire();
return S_OK;
}
HRESULT CGInput::UpdateData()
{
HRESULT hr;
int i;
if( NULL == g_pKeyboard )
return S_OK;
ZeroMemory( mKeyDown.disk, sizeof(mKeyDown.disk) );
hr = g_pKeyboard->GetDeviceState( sizeof(mKeyDown.disk), mKeyDown.disk );
if( FAILED(hr) )
{
hr = g_pKeyboard->Acquire();
while( hr == DIERR_INPUTLOST )
hr = g_pKeyboard->Acquire();
hr = g_pKeyboard->GetDeviceState( sizeof(mKeyDown.disk), mKeyDown.disk );
}
for( i = 0; i < 256; i++ )
{
if( mKeyDown.disk[i] & 0x80 )
{
//do something here
if(!mKeyDown.state[i]&&!mKeyDown.change[i])
{
mKeyDown.state[i]=TRUE;
mKeyDown.change[i]=TRUE;
}
else
{
mKeyDown.change[i]=FALSE;
}
}
else
{
mKeyDown.state[i]=FALSE;
mKeyDown.change[i]=FALSE;
}
}
return S_OK;
}
BOOL CGInput::GetKeyDown(int InputState)
{
KeyState state=ReadData(InputState);
if(state.result&&state.state)
{
return TRUE;
}
return FALSE;
}
BOOL CGInput::GetKeyChange(int InputState)
{
KeyState state=ReadData(InputState);
if(state.result&&state.change)
{
return TRUE;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -