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

📄 keyboard.cpp

📁 3D俄罗斯方块源码.rar
💻 CPP
字号:
//--------------------------------------------------------------
/**\!File
*
*File name:KEYBOARD.cpp
*
*His:add by honghaier @2004/2/22
*
*Desc:键盘输入类定义
*/
//---------------------------------------------------------------
#include "KEYBOARD.h"
#include "BASIC.h"
//---------------------------------------------------------------
/** 构造函数.
* 初始化成员变量
*/
CKEYBOARD::CKEYBOARD()
{
    m_lpDI=NULL; /*对应的DINPUT对象 */
    m_lpDIDevice=NULL ;/*创建的设备对象 */
	m_Log.Settype(1);
}
/** 析构函数.
* 初始化成员变量
*/
CKEYBOARD::~CKEYBOARD()
{   
CleanUpDirectInput();
}
/**!\brief
*初始化键盘设备
*\param hWnd代表主窗口
*\return 如果成功返回true,否则false
*/
bool CKEYBOARD::initKeyboard(HWND hWnd)
{
	//---------------创建DINPUT对象-------------------
	hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION, 
        IID_IDirectInput8, (void**)&m_lpDI, NULL); 
	if FAILED(hr) 
	{ 
		m_Log.Write("无法创建DINPUT对象(键盘)");
		CleanUpDirectInput();
		return false;
	} 
	m_Log.Write("创建DINPUT对象成功(键盘)");
	//----------------创建DINPUT设备------------------
	hr=m_lpDI->CreateDevice(GUID_SysKeyboard,&m_lpDIDevice, NULL); 
	if FAILED(hr) 
	{ 
		m_Log.Write("无法创建DINPUT设备(键盘)");
		CleanUpDirectInput();
		return false;
	} 
	m_Log.Write("创建DINPUT设备成功(键盘)");
	//-----------------设定数据格式-----------------
	hr=m_lpDIDevice->SetDataFormat(&c_dfDIKeyboard);
	if FAILED(hr) 
	{ 
		m_Log.Write("无法设定数据格式(键盘)");
		CleanUpDirectInput();
		return false;
	} 
	m_Log.Write("设定数据格式成功(键盘)");
	//-----------------设定程序协调层级-----------------
	hr=m_lpDIDevice->SetCooperativeLevel(hWnd,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
	if FAILED(hr) 
	{ 
		m_Log.Write("无法设定程序协调层级(键盘)");
		CleanUpDirectInput();
		return false;
	} 
	m_Log.Write("设定程序协调层级成功(键盘)");
	//-------------------取用输入装置----------------
	hr=m_lpDIDevice->Acquire();
	if FAILED(hr) 
	{ 
		m_Log.Write("取用输入装置失败(键盘)");
		CleanUpDirectInput();
		return false;
	} 
	m_Log.Write("取用输入装置成功(键盘)");
	return true;
}
/**!\brief
*键盘数据处理
*\return 返回键盘值
*/
/* int CKEYBOARD::ProcessKBInput()
{
char buffer[256];
//-------------------取用输入状态----------------
hr=m_lpDIDevice->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);
if FAILED(hr) 
{ 
m_Log.Write("取用输入状态失败(键盘)");
CleanUpDirectInput();
} 
int m_keychar[2];
m_keychar[0]=0;
m_keychar[1]=0;
if(buffer[m_control2->iUpKey]&0X80)
{
m_keychar[1]=1;
}
if(buffer[m_control2->iDownKey]&0x80)
{
m_keychar[1]=2;
}
if(buffer[m_control2->iLeftKey]&0x80)
{
m_keychar[1]=3;
}
if(buffer[m_control2->iRightKey]&0x80)
{
m_keychar[1]=4;
}
if(buffer[m_control->iUpKey]&0X80)
{
m_keychar[0]=1;
}
if(buffer[m_control->iDownKey]&0x80)
{
m_keychar[0]=2;
}
if(buffer[m_control->iLeftKey]&0x80)
{
m_keychar[0]=3;
}
if(buffer[m_control->iRightKey]&0x80)
{
m_keychar[0]=4;
}
return m_keychar[0]*10+m_keychar[1];
	}*/
	/**!\brief
	*清空资源
	*/
    void CKEYBOARD::CleanUpDirectInput()
	{ 
		if(m_lpDIDevice) 
			m_lpDIDevice->Unacquire();
		SAFE_RELEASE(m_lpDIDevice);
		SAFE_RELEASE(m_lpDI);
	}
    /**!\brief
	*设置键盘
	*/
    void CKEYBOARD::SetKey(int a,CControl *b)
	{
		switch(a)
		{
		case 1:
			m_control=b;
			break;
		case 2:
			m_control2=b;
			break;
		}
	}

⌨️ 快捷键说明

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