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

📄 keyboard.cpp

📁 墨香最新私服
💻 CPP
字号:
// Keyboard.cpp: implementation of the CKeyboard class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Keyboard.h"



//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//CKeyboard g_keyboard;
extern HWND _g_hWnd;

CKeyboard::CKeyboard()
{
	m_pdidKey = NULL;
}

CKeyboard::~CKeyboard()
{
}

void CKeyboard::Init( LPDIRECTINPUT8 pdi )
{
	HRESULT hr;
	DWORD dwCoopFlags = DISCL_NONEXCLUSIVE | DISCL_FOREGROUND | DISCL_NOWINKEY;

    hr = pdi->CreateDevice( GUID_SysKeyboard, &m_pdidKey, NULL );
    hr |= m_pdidKey->SetDataFormat( &c_dfDIKeyboard );
    hr |= m_pdidKey->SetCooperativeLevel( _g_hWnd, dwCoopFlags );


// 滚欺葛靛
	DIPROPDWORD dipdw;

	dipdw.diph.dwSize       = sizeof(DIPROPDWORD);
	dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER);
	dipdw.diph.dwObj        = 0;
	dipdw.diph.dwHow        = DIPH_DEVICE;
	dipdw.dwData            = KEYBOARD_BUFFER;

	hr = m_pdidKey->SetProperty( DIPROP_BUFFERSIZE, &dipdw.diph );

	m_pdidKey->Acquire();

	ClearKeyState();

}


void CKeyboard::Release()
{
	if( m_pdidKey )
		m_pdidKey->Unacquire();

	SAFE_RELEASE( m_pdidKey );
}


void CKeyboard::UpdateKeyboardState()
{
	HRESULT hr;

	m_dwBufferedKeys = KEYBOARD_BUFFER;
	
	hr = m_pdidKey->GetDeviceData( sizeof(DIDEVICEOBJECTDATA),
								   m_didodKey, &m_dwBufferedKeys, 0 );
	if( FAILED( hr ) ) {

		do
		{
			hr = m_pdidKey->Acquire();
		}
		while( hr == DIERR_INPUTLOST );
		
		ClearKeyState();
	}
	else
	{
		m_dwBufferPos = m_dwBufferedKeys;	//付瘤阜虐甫 罐阑 荐 乐档废
	}
}


void CKeyboard::StartGetKeyState()
{
	m_dwBufferPos = 0;
}


BOOL CKeyboard::GetNextKeyState()
{
	++m_dwBufferPos;

	if( m_dwBufferPos > m_dwBufferedKeys )
		return FALSE;

//PressKey
	if( m_didodKey[m_dwBufferPos-1].dwData & 0x80 )
	{
		m_KeyPress[m_didodKey[m_dwBufferPos-1].dwOfs] = TRUE;
	}
	else
	{
		m_KeyPress[m_didodKey[m_dwBufferPos-1].dwOfs] = FALSE;
	}

	return TRUE;
}


BOOL CKeyboard::GetKeyDown( DWORD dwKey )
{
	if( m_dwBufferedKeys == 0 ) return FALSE;
	if( m_dwBufferPos > m_dwBufferedKeys || m_dwBufferPos < 1 )
		return FALSE;

	if(( m_didodKey[m_dwBufferPos-1].dwOfs == dwKey ) && ( m_didodKey[m_dwBufferPos-1].dwData & 0x80 ) )
		return TRUE;

	return FALSE;
}


BOOL CKeyboard::GetKeyUp( DWORD dwKey )
{
	if( m_dwBufferedKeys == 0 ) return FALSE;
	if( m_dwBufferPos > m_dwBufferedKeys || m_dwBufferPos < 1 )
		return FALSE;

	ASSERT( m_dwBufferPos <= m_dwBufferedKeys && m_dwBufferPos > 0 );

	if(( m_didodKey[m_dwBufferPos-1].dwOfs == dwKey ) && !( m_didodKey[m_dwBufferPos-1].dwData & 0x80 ) )
		return TRUE;

	return FALSE;
}


BOOL CKeyboard::GetKeyPressed( DWORD dwKey )
{
	return m_KeyPress[dwKey];
}



void CKeyboard::ClearKeyState()
{
	m_dwBufferedKeys	= 0;
	m_dwBufferPos		= 1;

	ZeroMemory( m_KeyPress, sizeof( m_KeyPress ) );
}


BOOL CKeyboard::IsEmptyKeyboardEvent()
{
	if( m_dwBufferPos > m_dwBufferedKeys )
		return TRUE;

	return FALSE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -