?? mouse.cpp
字號:
//--------------------------------------------------------------
/**\!File
*
*File name:MOUSE.h
*
*His:add by honghaier @2004/2/24
*
*Desc:鼠標輸入類
*/
//---------------------------------------------------------------
#include "MOUSE.h"
#define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
//---------------------------------------------------------------
#define MOUSEBUTTONDOWN(key) (key & 0x80)
#define MOUSEBUTTON_LEFT 0
#define MOUSEBUTTON_RIGHT 1
#define MOUSEBUTTON_MIDDLE 2
//---------------------------------------------------------------
/** 構造函數.
* 初始化成員變量
*/
CMOUSE::CMOUSE()
{
m_lpDI=NULL; /*對應的DINPUT對象 */
m_lpDIDevice=NULL ;/*創建的設備對象 */
m_Log.Settype(1);
m_nMouseLeft=0;/**按左鍵 */
m_nMouseRight=0;/**按右鍵 */
m_nMouseX=0;/**當前x坐標 */
m_nMouseY=0;/**當前y坐標 */
strcpy(m_cbmp,"bmp/Arrow.bmp");/**文件名 */
m_iwidth=32;/**圖像寬 */
m_iheight=32;/**圖像高 */
}
/** 析構函數.
* 初始化成員變量
*/
CMOUSE::~CMOUSE()
{ if(m_lpDIDevice)
m_lpDIDevice->Unacquire();
SAFE_RELEASE(m_lpDIDevice);
SAFE_RELEASE(m_lpDI);
}
/**!\brief
*初始化鼠標設備
*\param hWnd代表主窗口
*\return 如果成功返回true,否則false
*/
bool CMOUSE::initMouse(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_SysMouse,&m_lpDIDevice, NULL);
if FAILED(hr)
{
m_Log.Write("無法創建DINPUT設備(鼠標)");
CleanUpDirectInput();
return false;
}
m_Log.Write("創建DINPUT設備成功(鼠標)");
//-----------------設定數據格式-----------------
hr=m_lpDIDevice->SetDataFormat(&c_dfDIMouse);
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
*鍵盤數據處理
*/
void CMOUSE::ProcessMInput()
{
DIMOUSESTATE MouseState;
//-------------------取用輸入狀態----------------
hr=m_lpDIDevice->GetDeviceState(sizeof(MouseState),(LPVOID)&MouseState);
if FAILED(hr)
{
m_Log.Write("取用輸入狀態失敗(鼠標)");
CleanUpDirectInput();
}
if(MOUSEBUTTONDOWN(MouseState.rgbButtons[MOUSEBUTTON_LEFT]))
{
m_nMouseLeft = 1;
}
else
{
m_nMouseLeft = 0;
}
if(MOUSEBUTTONDOWN(MouseState.rgbButtons[MOUSEBUTTON_RIGHT]))
{
m_nMouseRight = 1;
}
else
{
m_nMouseRight = 0;
}
m_nMouseX += MouseState.lX;
m_nMouseY += MouseState.lY;
}
/**!\brief
*清空資源
*/
void CMOUSE::CleanUpDirectInput()
{ if(m_lpDIDevice)
m_lpDIDevice->Unacquire();
SAFE_RELEASE(m_lpDIDevice);
SAFE_RELEASE(m_lpDI);
}
/**!\brief
*鼠標渲染
*/
bool CMOUSE::RenderMouse()
{
/* if(m_nMouseX<5)m_nMouseX=5;
if(m_nMouseY<5)m_nMouseY=5;
if(m_nMouseX>600)m_nMouseX=600;
if(m_nMouseY>440)m_nMouseY=440;*/
return true;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -