md_input.h

来自「MDEngine2plus游戏开发库! 用来开发游戏超级简单!」· C头文件 代码 · 共 107 行

H
107
字号
//********************************************************************
//						MD 引擎 控制器 部件的定义
//		Powered by @J--S Studio			Johnhans		2004.7.15
//********************************************************************

#ifndef MD_INPUT_H
#define MD_INPUT_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#ifdef	MDENGINE2P_EXPORTS
#define MDENGINE_API __declspec(dllexport)
#else
#define MDENGINE_API __declspec(dllimport)
#endif

#define DIRECTINPUT_VERSION 0x0700
#include <dinput.h>

#include "common.h"

class MDENGINE_API CMD_Input
{
public:
	void	EnableErrMSG(bool bshowerr);	// 允许or禁止弹出错误信息
	DWORD	GetErrCode(void);				// 得到错误代码

	CMD_Input();
	virtual ~CMD_Input();
	bool Create(HWND hwnd, BYTE input);	// 创建CMD_Input设备
	void Update(void);					// 检索当前有效设备的更新
	bool IsInput(WORD btn,BYTE mode);	// 检测玩家是否按了指定的键
	WORD GetInput(BYTE mode,bool bAxis,bool bjoypri);	// 取得用户按下的键(包括手柄)
	void Acquire(bool acquire);			// 释放或者锁定有效输入设备
	void Free();						// 释放CMD_Input设备
	LPDIRECTINPUT7 *GetDIObject(void);	// 取得DirectInput实例

private:
	LPDIRECTINPUT7				m_lpDI;		// DINPUT设备
	HWND						m_hWnd;		// 窗口句柄

	bool	m_bShowErrMSG;			// 是否显示错误
	DWORD	m_ErrCode;				// 当前错误代码

private:
	void	ShowErrMSG();	// 显示错误信息


//鼠标控制器
public:
	bool CreateMouse(DWORD dwFlags=DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);	// 以指定方式建立鼠标设备
	void FreeMouse(void);				// 释放鼠标设备
	void AcquireMouse(bool acqm);		// 锁定、释放鼠标设备
	bool UpdateMouse(void);				// 检索更新鼠标的状态
	int  GetMouseLXY(WORD ax);			// 取得鼠标的X或Y轴的偏移量
	bool IsMouseDown(WORD btn,BYTE mode);	// 检测鼠标的某个按键是否被按下
	WORD GetNextMouseDown(BYTE mode,bool bAxis=false);// 取得下一个鼠标上有动作的键值
	LPDIRECTINPUTDEVICE7 *GetMouseObject(void); // 取得鼠标的DIRECTINPUTDEVICE7设备

private:
	LPDIRECTINPUTDEVICE7		m_lpMouse;	// 鼠标设备
	DIMOUSESTATE2				*m_lpdimsp;	// 前次鼠标状态
	DIMOUSESTATE2				*m_lpdimsn;	// 当前鼠标状态
	int							m_iPosMouse[3];

//键盘控制器
public:
	bool CreateKeyboard(DWORD dwFlags=DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);	// 以指定方式建立键盘设备
	void FreeKeyboard(void);				// 释放键盘设备
	void AcquireKeyboard(bool acqm);		// 锁定、释放键盘设备
	bool UpdateKeyboard(void);				// 检索更新键盘的状态
	bool IsKeyDown(WORD key,BYTE mode);		// 检测指定的键是否被按下
	WORD GetNextKeyDown(BYTE mode);			// 取得下一个键盘上有动作的键值
	LPDIRECTINPUTDEVICE7 *GetKeyboardObject(void); // 取得键盘DIRECTINPUTDEVICE7

private:
	LPDIRECTINPUTDEVICE7		m_lpKeyboard;// 键盘设备
	BYTE						*m_lpdiksp;	 // 前次鼠标状态
	BYTE						*m_lpdiksn;	 // 当前鼠标状态
	int							m_iPosKeyboard[3];

//游戏手柄控制器
public:
	bool CreateJoystick(DWORD dwFlags=DISCL_EXCLUSIVE|DISCL_FOREGROUND);		// 以指定方式建立手柄设备
	void SetDeadzone(int ratio=5000);			// 设置手柄的精确度(ratio越大精确度越低)
	bool IsJoystickExist(void);
	void FreeJoystick(void);					// 释放手柄设备
	void AcquireJoystick(bool acqm);			// 锁定、释放手柄设备
	bool UpdateJoystick(void);					// 检索更新手柄的状态
	int  GetJoystickLXY(WORD ax);				// 取得手柄的X或Y或Z轴偏移量
	bool IsJoystickDown(WORD btn,BYTE mode);	// 检测指定的按钮是否被按下
	WORD GetNextJoystickDown(BYTE mode,bool bAxis=false);	// 取得当前用户按下的全部按钮
	LPDIRECTINPUTDEVICE7 *GetJoystickObject(void);	// 取得手柄的DIRECTINPUTDEVICE7

private:
	LPDIRECTINPUTDEVICE7		m_lpJoystick;// 游戏手柄设备
	GUID						guidJoystick;// 游戏手柄设备ID
	DIJOYSTATE					*m_lpdijsp;	 // 前次手柄状态
	DIJOYSTATE					*m_lpdijsn;	 // 当前手柄状态
	int							m_Deadzone;	 // 手柄方向杆的无效区域
	int							m_iPosJoystick[3];
};

#endif

⌨️ 快捷键说明

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