?? keyboard.cpp
字號:
//--------------------------------------------------------------
/**\!File
*
*File name:KEYBOARD.cpp
*
*His:add by honghaier @2004/2/22
*
*Desc:鍵盤輸入類定義
*/
//---------------------------------------------------------------
#include "KEYBOARD.h"
#include "BASIC.h"
//---------------------------------------------------------------
/** 構造函數(shù).
* 初始化成員變量
*/
CKEYBOARD::CKEYBOARD()
{
m_lpDI=NULL; /*對應的DINPUT對象 */
m_lpDIDevice=NULL ;/*創(chuàng)建的設備對象 */
m_Log.Settype(1);
}
/** 析構函數(shù).
* 初始化成員變量
*/
CKEYBOARD::~CKEYBOARD()
{
CleanUpDirectInput();
}
/**!\brief
*初始化鍵盤設備
*\param hWnd代表主窗口
*\return 如果成功返回true,否則false
*/
bool CKEYBOARD::initKeyboard(HWND hWnd)
{
//---------------創(chuàng)建DINPUT對象-------------------
hr = DirectInput8Create(GetModuleHandle(NULL), DIRECTINPUT_VERSION,
IID_IDirectInput8, (void**)&m_lpDI, NULL);
if FAILED(hr)
{
m_Log.Write("無法創(chuàng)建DINPUT對象(鍵盤)");
CleanUpDirectInput();
return false;
}
m_Log.Write("創(chuàng)建DINPUT對象成功(鍵盤)");
//----------------創(chuàng)建DINPUT設備------------------
hr=m_lpDI->CreateDevice(GUID_SysKeyboard,&m_lpDIDevice, NULL);
if FAILED(hr)
{
m_Log.Write("無法創(chuàng)建DINPUT設備(鍵盤)");
CleanUpDirectInput();
return false;
}
m_Log.Write("創(chuàng)建DINPUT設備成功(鍵盤)");
//-----------------設定數(shù)據(jù)格式-----------------
hr=m_lpDIDevice->SetDataFormat(&c_dfDIKeyboard);
if FAILED(hr)
{
m_Log.Write("無法設定數(shù)據(jù)格式(鍵盤)");
CleanUpDirectInput();
return false;
}
m_Log.Write("設定數(shù)據(jù)格式成功(鍵盤)");
//-----------------設定程序協(xié)調(diào)層級-----------------
hr=m_lpDIDevice->SetCooperativeLevel(hWnd,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
if FAILED(hr)
{
m_Log.Write("無法設定程序協(xié)調(diào)層級(鍵盤)");
CleanUpDirectInput();
return false;
}
m_Log.Write("設定程序協(xié)調(diào)層級成功(鍵盤)");
//-------------------取用輸入裝置----------------
hr=m_lpDIDevice->Acquire();
if FAILED(hr)
{
m_Log.Write("取用輸入裝置失敗(鍵盤)");
CleanUpDirectInput();
return false;
}
m_Log.Write("取用輸入裝置成功(鍵盤)");
return true;
}
/**!\brief
*鍵盤數(shù)據(jù)處理
*\return 返回鍵盤值
*/
/* int CKEYBOARD::ProcessKBInput()
{
char buffer[256];
//-------------------取用輸入狀態(tài)----------------
hr=m_lpDIDevice->GetDeviceState(sizeof(buffer),(LPVOID)&buffer);
if FAILED(hr)
{
m_Log.Write("取用輸入狀態(tài)失敗(鍵盤)");
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 + -