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

📄 mouse.cpp

📁 3D俄罗斯方块源码.rar
💻 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 + -