📄 keyboard.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 + -