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