⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cginput.cpp

📁 zip压缩,解压缩 英文版本的,大家凑货看
💻 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 + -