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

📄 gp_input.h

📁 国产的RPG源码
💻 H
字号:
//********************************************
//	DirectInput 相关处理函数
//********************************************
#ifndef _GP_INPUT_
#define _GP_INPUT_

#include <dinput.h>
#ifndef DIRECTINPUT_VERSION
#define DIRECTINPUT_VERSION         0x0300
#endif

#if DIRECTINPUT_VERSION<0x0800
#pragma comment(lib,"dinput.lib")
#else
#pragma comment(lib,"dinput8.lib")
#define USE_DX8  1
#endif

class CMouse;
class CKey;
class CJoystick;

//全局对象
extern CMouse Mouse;			//鼠标
extern CKey Key;				//键盘
extern CJoystick g_Joystick;	//手柄
extern unsigned mouse, key, joystick;	//鼠标、键盘和手柄的缓冲区数据接受

//DINPUT
bool WINAPI InitInput();	//初始化
void WINAPI FreeInput();	//释放

#define LEFT_UP		( key==DIK_LEFT-128 || joystick==DIJ_LEFT+48 )
#define LEFT_DOWN	( key==DIK_LEFT || g_Joystick.GetState( DIJ_LEFT )==DIJ_LEFT )
#define LEFT_ON		( Key.GetState( DIK_LEFT ) || g_Joystick.GetState( DIJ_LEFT )==DIJ_LEFT+128 )

#define RIGHT_UP	( key==DIK_RIGHT-128 || joystick==DIJ_RIGHT+48 )
#define RIGHT_DOWN	( key==DIK_RIGHT || g_Joystick.GetState( DIJ_RIGHT )==DIJ_RIGHT )
#define RIGHT_ON	( Key.GetState( DIK_RIGHT ) || g_Joystick.GetState( DIJ_RIGHT )==DIJ_RIGHT+128 )

#define UP_UP		( key==DIK_UP-128 || joystick==DIJ_UP+48 )
#define UP_DOWN		( key==DIK_UP || g_Joystick.GetState( DIJ_UP )==DIJ_UP )
#define UP_ON		( Key.GetState( DIK_UP ) || g_Joystick.GetState( DIJ_UP ) ==DIJ_UP+128)

#define DOWN_UP		( key==DIK_DOWN-128 || joystick==DIJ_DOWN+48 )
#define DOWN_DOWN	( key==DIK_DOWN || g_Joystick.GetState( DIJ_DOWN )==DIJ_DOWN )
#define DOWN_ON		( Key.GetState( DIK_DOWN ) || g_Joystick.GetState( DIJ_DOWN )==DIJ_DOWN+128 )

#define A_UP		( key==DIK_RETURN+128 || key==DIK_SPACE+128 || joystick==DIJ_2+48 )
#define A_DOWN		( key==DIK_RETURN || key==DIK_SPACE || joystick==DIJ_2 )
#define A_ON		( Key.GetState( DIK_RETURN ) || Key.GetState( DIK_SPACE ) || g_Joystick.GetState( DIJ_2 ) )

#define B_UP		( key==DIK_ESCAPE+128 || joystick==DIJ_1+48 )
#define B_DOWN		( key==DIK_ESCAPE || joystick==DIJ_1 )
#define B_ON		( Key.GetState( DIK_ESCAPE ) || g_Joystick.GetState( DIJ_1 ) )

///////////////////////////////////////////////////////
//鼠标类
///////////////////////////////////////////////////////
//mouse动作
#define LB_DOWN 1
#define LB_UP	8
#define RB_DOWN 2
#define RB_UP	16
#define MB_DOWN 4
#define MB_UP	32

//键定义
enum {
	LBUTTON=0,
	RBUTTON=1,
	MBUTTON=2,
	LRBUTTON=4
};

class CMouse
{
public:
#if USE_DX8
	LPDIRECTINPUTDEVICE8 g_pMouse;
#else
	LPDIRECTINPUTDEVICE g_pMouse;			//鼠标设备
#endif
	DWORD MouseX, MouseY;					//鼠标坐标
	DWORD MouseButton[4];					//按钮状态

public:
	HRESULT WINAPI InitInput_Mouse( HWND );	//初始化
	HRESULT WINAPI SetAcquire( HWND );		//获取设备
	void WINAPI FreeInput_Mouse();			//释放鼠标

	unsigned char WINAPI GetMouseData();	//获取缓冲区数据
	void WINAPI ReleaseMouseBuffer();		//清空鼠标缓冲区

	void WINAPI GetMouseState();			//获取立即数据
	bool WINAPI WaitMouse(char);			//等待某健按下(进入死循环中)
	char WINAPI DownButton();				//返回当前按下某键 0=左 1=右 2=中 4=左右 -1=无
	bool WINAPI IsButton(char);				//某键是否按下 0=左 1=右 2=中 4=左右
};

///////////////////////////////////////////////////////
//键盘类
///////////////////////////////////////////////////////
class CKey
{
#if USE_DX8
	LPDIRECTINPUTDEVICE8 lpDIKey;
#else
	LPDIRECTINPUTDEVICE lpDIKey;			//键盘设备
#endif

public:
	CKey();
	virtual ~CKey();
	bool WINAPI InitInput_Key( HWND );		//初始化
	HRESULT WINAPI SetAcquire( HWND );		//获取设备
	void WINAPI FreeInput_Key();			//释放

////////////////////////////////////////////
// 即时数据
private:
	#define KEYDOWN(name,key) (name[key]&0x80)
	unsigned char KeyState[256];			//即时数据

public:
	void WINAPI GetKeyState();				//获取键盘即时数据
	bool WINAPI KeyDown(unsigned char);		//某键按下
	bool WINAPI GetState(unsigned char);	//某键当前是否按下

////////////////////////////////////////////
// 缓冲数据
private:
	#define KEYBUFFERSIZE	64
	unsigned char KeyBuffer[KEYBUFFERSIZE];	//键盘缓冲区
	int KeyBuffer_Start, KeyBuffer_End;		//键盘缓冲区指针

public:
	void WINAPI GetKeyData();				//获取键盘缓冲区数据
	unsigned char WINAPI GetKey();			//从缓冲区取一个数据(0=无 释放按键>128)
	void WINAPI ReleaseKeyBuffer();			//清空键盘缓冲区
};

///////////////////////////////////////////////////////
//游戏手柄类
///////////////////////////////////////////////////////
#define DIJ_1		10
#define DIJ_2		1
#define DIJ_3		2
#define DIJ_4		3
#define DIJ_R1		4
#define	DIJ_R2		5
#define DIJ_L1		6
#define DIJ_L2		7
#define DIJ_START	8
#define DIJ_SELECT	9
#define DIJ_UP		12
#define DIJ_LEFT	13
#define DIJ_DOWN	14
#define DIJ_RIGHT	15

class CJoystick
{
public:
	#define BUFFERSIZE 32
	#define MAXKEY 32
#if USE_DX8
	static LPDIRECTINPUT8       g_pDI;
	static LPDIRECTINPUTDEVICE8	m_pJoystick;
#else
	static LPDIRECTINPUT7       g_pDI;
	static LPDIRECTINPUTDEVICE2	m_pJoystick;
#endif
	static DIDEVCAPS			m_diDevCaps;

	unsigned char Buffer[BUFFERSIZE];	//缓冲区
	unsigned char State[MAXKEY];		//即时数据
	int Buffer_Start, Buffer_End;		//缓冲区指针

public:
	CJoystick();
	virtual ~CJoystick();

	HRESULT InitInput_Joystick( HWND );
	HRESULT SetAcquire( HWND );
	HRESULT FreeInput_Joystick();

	HRESULT GetJoystickState();			//获取即时数据
	unsigned char GetState(unsigned char);		//某键当前是否按下
	void WINAPI GetJoystickData();		//获取缓冲区数据
	unsigned char WINAPI GetKey();		//从缓冲区取一个数据(0=无 释放按键>128)
	void WINAPI ReleaseBuffer();		//清空缓冲区
};

BOOL CALLBACK EnumJoysticksCallback( const DIDEVICEINSTANCE* pdidInstance, VOID* pContext );
BOOL CALLBACK EnumAxesCallback( const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* pContext );

#endif

⌨️ 快捷键说明

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