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

📄 input.cpp

📁 Camera的源文件只是一部分Camera的源文件只是一部分
💻 CPP
字号:
#include "Input.h"

#define SAFE_RELEASE(p) {if(p){(p)->Release();(p)=NULL;}}

HRESULT DXInput::InitInput(HWND hWnd, HINSTANCE hInst)
{
	HRESULT hr;
	if(FAILED(DirectInput8Create(hInst,					//程序实例句柄
								DIRECTINPUT_VERSION,	//DirectInput版本号
								IID_IDirectInput8,		//接口的唯一标识符
								(void**)&m_pDInput,
								NULL)))
		return E_FAIL;

	//初始化键盘
	if(FAILED(m_pDInput->CreateDevice(GUID_SysKeyboard,				//键盘的全局唯一标识符
										&m_pDInputDeviceKeyboard,	//键盘的设备指针
										NULL)))
	{
		return E_FAIL;
	}

	if(FAILED(m_pDInputDeviceKeyboard->SetCooperativeLevel(hWnd,DISCL_FOREGROUND|DISCL_NONEXCLUSIVE)))
	{
		SAFE_RELEASE(m_pDInputDeviceKeyboard);
		return E_FAIL;
	}
	/*----------------------------------------------------------------------
	DISCL_BACKGROUND	后台:即使所属的窗口不是活动窗口,仍然可取得输入设备的数据
	DISCL_FOREGROUND	前台:只有当窗口处于前台时,输入设备才能输入数据
	DISCL_EXCLUSIVE		独占式:独占输入设备
	DISCL_NONEXCLUSIVE	非独占式:非独占输入设备
	----------------------------------------------------------------------*/
	if(FAILED(m_pDInputDeviceKeyboard->SetDataFormat(&c_dfDIKeyboard)))
	{
		SAFE_RELEASE(m_pDInputDeviceKeyboard);
		return E_FAIL;
	}

	m_pDInputDeviceKeyboard->Acquire();
	
	//初始化鼠标
	if(FAILED(m_pDInput->CreateDevice(GUID_SysMouse,&m_pMouse,NULL)))
	{
		return E_FAIL;
	}
	if(FAILED(m_pMouse->SetDataFormat(&c_dfDIMouse)))
	{
		SAFE_RELEASE(m_pMouse);
		return E_FAIL;
	}
	if(FAILED(hr = m_pMouse->SetCooperativeLevel(hWnd,DISCL_FOREGROUND|DISCL_NONEXCLUSIVE)))
	{
		if(hr == DIERR_UNSUPPORTED) 
			MessageBox(NULL, TEXT("协作等级不支持"),TEXT("ERROR"),MB_OK);
		SAFE_RELEASE(m_pMouse);
		return E_FAIL;
	}


	hr = m_pMouse->Acquire();
	if( hr == DIERR_OTHERAPPHASPRIO || hr == DIERR_NOTACQUIRED )
	{
		MessageBox(NULL,TEXT("不能获得鼠标"),TEXT("error"),MB_OK);
		return E_FAIL;
	}
	return S_OK;
}

void DXInput::UpdateInput()
{
	HRESULT hr;
	ZeroMemory(keyState,sizeof(keyState));
	hr = m_pDInputDeviceKeyboard->GetDeviceState(sizeof(keyState),keyState);	
	if(hr==DIERR_INPUTLOST)
	{
		m_pDInputDeviceKeyboard->Acquire();
		m_pDInputDeviceKeyboard->GetDeviceState(sizeof(keyState),keyState);
	}

	//float dx,dy,dz;
	ZeroMemory(&mousestate,sizeof(mousestate));
	hr = m_pMouse->GetDeviceState(sizeof(DIMOUSESTATE),(LPVOID)&mousestate);
	if(hr==DIERR_INPUTLOST)
	{
		m_pMouse->Acquire();
		m_pMouse->GetDeviceState(sizeof(DIMOUSESTATE),(LPVOID)&mousestate);
	}
}
//获得鼠标的移动量
LONG DXInput::GetMouseMove(DWORD Axis)
{
	if(Axis == MOUSE_X)
		return mousestate.lX;
	if(Axis == MOUSE_Y)
		return mousestate.lY;
	if(Axis == MOUSE_Z)
		return mousestate.lZ;
}

bool DXInput::GetMouseButton(DWORD button)
{
	if(button == LBUTTON)
		return (mousestate.rgbButtons[0] & 0x80 ? true : false);
	if(button == RBUTTON)
		return (mousestate.rgbButtons[1] & 0x80 ? true : false);
	if(button == MBUTTON)
		return (mousestate.rgbButtons[2] & 0x80 ? true : false);
}
bool DXInput::GetKeyboard(DWORD key)
{
	return keyState[key]&0x80 ? true : false;
}

void DXInput::Release()
{
	if(m_pMouse)
	{
		m_pMouse->Unacquire();
		SAFE_RELEASE(m_pMouse);
	}
	if(m_pDInputDeviceKeyboard)
	{
		m_pDInputDeviceKeyboard->Unacquire();
		SAFE_RELEASE(m_pDInputDeviceKeyboard);
	}

	if(m_pDInput){ SAFE_RELEASE(m_pDInput); }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -