📄 md_input.h
字号:
//********************************************************************
// MD 引擎 控制器 部件的定义
// Powered by @J--S Studio Johnhans 2002.7.15
//********************************************************************
#ifndef MD_INPUT_H
#define MD_INPUT_H
#ifdef MDENGINE_EXPORTS
#define MDENGINE_API __declspec(dllexport)
#else
#define MDENGINE_API __declspec(dllimport)
#endif
#define DIRECTINPUT_VERSION 0x0700
#include <dinput.h>
#define INPUT_NONE 0
#define INPUT_KEYBOARD 1
#define INPUT_MOUSE 2
#define INPUT_JOYSTICK 4
#define KEY_NONE 0 // 没有按键被按下
#define KD_ALWAYS 0
#define KD_DOWN 1
#define KD_UP 2
#define DIM_X 0
#define DIM_Y 1
#define DIM_Z 2
#define JOY_OFFSET 300
#define DIJ_X 80 + JOY_OFFSET
#define DIJ_Y 81 + JOY_OFFSET
#define DIJ_Z 82 + JOY_OFFSET
#define DIJ_RX 83 + JOY_OFFSET
#define DIJ_RY 84 + JOY_OFFSET
#define DIJ_RZ 85 + JOY_OFFSET
#define DIJ_SLIDER0 86 + JOY_OFFSET
#define DIJ_SLIDER1 87 + JOY_OFFSET
#define DIJ_ALX 90 + JOY_OFFSET
#define DIJ_ARX 91 + JOY_OFFSET
#define DIJ_ALY 92 + JOY_OFFSET
#define DIJ_ARY 93 + JOY_OFFSET
#define DIJ_ALZ 94 + JOY_OFFSET
#define DIJ_ARZ 95 + JOY_OFFSET
#define DIK_ENTER DIK_RETURN
#define DIK_LCTRL DIK_LCONTROL
#define DIK_RCTRL DIK_RCTRL
class MDENGINE_API CMD_Input
{
public:
CMD_Input();
virtual ~CMD_Input();
bool Create(HWND hwnd, BYTE input);
void Update(void);
bool IsInput(WORD btn,BYTE mode);
WORD GetInput(BYTE mode,bool bAxis,bool bjoypri);
void Acquire(bool acquire);
void Free();
LPDIRECTINPUT7 *GetDIObject(void){ return &m_lpDI; }
private:
LPDIRECTINPUT7 m_lpDI; // DINPUT设备
HWND m_hWnd; // 窗口句柄
//鼠标控制器
public:
bool CreateMouse(DWORD dwFlags=DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
void FreeMouse(void);
void AcquireMouse(bool acqm);
bool UpdateMouse(void);
int GetMouseLXY(BYTE ax);
bool IsMouseButtonDown(BYTE btn,BYTE mode);
LPDIRECTINPUTDEVICE7 *GetMouseObject(void){ return &m_lpMouse; }
private:
LPDIRECTINPUTDEVICE7 m_lpMouse; // 鼠标设备
DIMOUSESTATE2 *m_lpdimsp; // 前次鼠标状态
DIMOUSESTATE2 *m_lpdimsn; // 当前鼠标状态
//键盘控制器
public:
bool CreateKeyboard(DWORD dwFlags=DISCL_NONEXCLUSIVE | DISCL_FOREGROUND);
void FreeKeyboard(void);
void AcquireKeyboard(bool acqm);
bool UpdateKeyboard(void);
bool IsKeyPress(DWORD key,BYTE mode);
BYTE GetKeyDown(BYTE mode,LPBYTE buf,int &Element);
LPDIRECTINPUTDEVICE7 *GetKeyboardObject(void){ return &m_lpKeyboard; }
private:
LPDIRECTINPUTDEVICE7 m_lpKeyboard;// 键盘设备
BYTE *m_lpdiksp; // 前次鼠标状态
BYTE *m_lpdiksn; // 当前鼠标状态
//游戏手柄控制器
public:
bool CreateJoystick(DWORD dwFlags=DISCL_EXCLUSIVE|DISCL_FOREGROUND);
void SetDeadzone(int ratio=5000){ m_Deadzone=ratio; }
void FreeJoystick(void);
void AcquireJoystick(bool acqm);
bool UpdateJoystick(void);
int GetJoystickLXY(DWORD ax);
bool IsJoyButtonDown(DWORD btn,BYTE mode);
WORD GetJoyButtonDown(BYTE mode,LPWORD buf,int &Element,bool bAxis=false);
LPDIRECTINPUTDEVICE7 *GetJoystickObject(void){ return &m_lpJoystick; }
private:
LPDIRECTINPUTDEVICE7 m_lpJoystick;// 游戏手柄设备
GUID guidJoystick;// 游戏手柄设备ID
DIJOYSTATE *m_lpdijsp; // 前次手柄状态
DIJOYSTATE *m_lpdijsn; // 当前手柄状态
int m_Deadzone; // 手柄方向杆的无效区域
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -