www.pudn.com > notWow.rar > Input.h


//------------------------------------------------------- 
//  Input Device: control the Mouse and Keyboard 
//------------------------------------------------------- 
 
#pragma once 
 
#include  
 
#define KEY_RELEASED        FALSE 
#define KEY_PRESSED         TRUE 
 
#define KEY_UNLOCKED        FALSE 
#define KEY_LOCKED          TRUE 
 
#define KEY_ESC             DIK_ESCAPE 
#define KEY_ESCAPE          DIK_ESCAPE 
 
#define KEY_MINUS           DIK_MINUS 
#define KEY_EQUALS          DIK_EQUALS 
 
#define KEY_BACKSPACE       DIK_BACK 
 
#define KEY_TAB             DIK_TAB 
 
#define KEY_LBRACKET        DIK_LBRACKET 
#define KEY_RBRACKET        DIK_RBRACKET 
 
#define KEY_ENTER           DIK_RETURN 
#define KEY_RETURN          DIK_RETURN 
 
#define KEY_CTRL            DIK_LCONTROL 
#define KEY_LCTRL           DIK_LCONTROL 
#define KEY_RCTRL           DIK_RCTRL 
 
#define KEY_SHIFT           DIK_LSHIFT 
#define KEY_LSHIFT          DIK_LSHIFT 
#define KEY_RSHIFT          DIK_RSHIFT 
 
#define KEY_ALT             DIK_LMENU 
#define KEY_LALT            DIK_LMENU 
#define KEY_RALT            DIK_RMENU 
 
#define KEY_0               DIK_0 
#define KEY_1               DIK_1 
#define KEY_2               DIK_2 
#define KEY_3               DIK_3 
#define KEY_4               DIK_4 
#define KEY_5               DIK_5 
#define KEY_6               DIK_6 
#define KEY_7               DIK_7 
#define KEY_8               DIK_8 
#define KEY_9               DIK_9 
 
#define KEY_A               DIK_A 
#define KEY_B               DIK_B 
#define KEY_C               DIK_C 
#define KEY_D               DIK_D 
#define KEY_E               DIK_E 
#define KEY_F               DIK_F 
#define KEY_G               DIK_G 
#define KEY_H               DIK_H 
#define KEY_I               DIK_I 
#define KEY_J               DIK_J 
#define KEY_K               DIK_K 
#define KEY_L               DIK_L 
#define KEY_M               DIK_M 
#define KEY_N               DIK_N 
#define KEY_O               DIK_O 
#define KEY_P               DIK_P 
#define KEY_Q               DIK_Q 
#define KEY_R               DIK_R 
#define KEY_S               DIK_S 
#define KEY_T               DIK_T 
#define KEY_U               DIK_U 
#define KEY_V               DIK_V 
#define KEY_W               DIK_W 
#define KEY_X               DIK_X 
#define KEY_Y               DIK_Y 
#define KEY_Z               DIK_Z 
 
#define KEY_SEMICOLON       DIK_SEMICOLON 
#define KEY_APOSTROPHE      DIK_APOSTROPHE 
 
#define KEY_TILDE           DIK_GRAVE 
#define KEY_GRAVE           DIK_GRAVE 
 
#define KEY_BACKSLASH       DIK_BACKSLASH 
 
#define KEY_COMMA           DIK_COMMA 
#define KEY_PERIOD          DIK_PERIOD 
#define KEY_FORWARDSLASH    DIK_SLASH 
#define KEY_SLASH           DIK_SLASH 
 
#define KEY_SPACE           DIK_SPACE 
 
#define KEY_CAPSLOCK        DIK_CAPITAL 
#define KEY_CAPITAL         DIK_CAPITAL 
 
#define KEY_F1              DIK_F1 
#define KEY_F2              DIK_F2 
#define KEY_F3              DIK_F3 
#define KEY_F4              DIK_F4 
#define KEY_F5              DIK_F5 
#define KEY_F6              DIK_F6 
#define KEY_F7              DIK_F7 
#define KEY_F8              DIK_F8 
#define KEY_F9              DIK_F9 
#define KEY_F10             DIK_F10 
#define KEY_F11             DIK_F11 
#define KEY_F12             DIK_F12 
 
#define KEY_SYSRQ           DIK_SYSRQ 
#define KEY_SCROLLLOCK      DIK_SCROLL 
#define KEY_PAUSE           DIK_PAUSE 
 
#define KEY_NUMLOCK         DIK_NUMLOCK 
#define KEY_NUMPAD0         DIK_NUMPAD0 
#define KEY_NUMPAD1         DIK_NUMPAD1 
#define KEY_NUMPAD2         DIK_NUMPAD2 
#define KEY_NUMPAD3         DIK_NUMPAD3 
#define KEY_NUMPAD4         DIK_NUMPAD4 
#define KEY_NUMPAD5         DIK_NUMPAD5 
#define KEY_NUMPAD6         DIK_NUMPAD6 
#define KEY_NUMPAD7         DIK_NUMPAD7 
#define KEY_NUMPAD8         DIK_NUMPAD8 
#define KEY_NUMPAD9         DIK_NUMPAD9 
#define KEY_ADD             DIK_ADD 
#define KEY_SUBTRACT        DIK_SUBTRACT 
#define KEY_DIVIDE          DIK_DEVICE 
#define KEY_MULTIPLY        DIK_MULTIPLY 
#define KEY_DECIMAL         DIK_DECIMAL 
#define KEY_NUMPADENTER     DIK_NUMPADENTER 
 
#define KEY_INSERT          DIK_INSERT 
#define KEY_DELETE          DIK_DELETE 
#define KEY_HOME            DIK_HOME 
#define KEY_END             DIK_END 
#define KEY_PAGEUP          DIK_PRIOR 
#define KEY_PAGEDOWN        DIK_NEXT 
 
#define KEY_UP              DIK_UP 
#define KEY_DOWN            DIK_DOWN 
#define KEY_LEFT            DIK_LEFT 
#define KEY_RIGHT           DIK_RIGHT 
 
#define KEY_LWIN            DIK_LWIN 
#define KEY_RWIN            DIK_RWIN 
#define KEY_APPS            DIK_APPS 
 
 
 
class Input   
{ 
  protected: 
    HWND            m_hWnd; 
    LPDIRECTINPUT8  m_pDI; 
 
  public: 
	Input() : m_hWnd(NULL),m_pDI(NULL) {} 
	~Input() { Free(); } 
 
    LPDIRECTINPUT8  GetDirectInput()		{ return m_pDI; } 
    HWND			GethWnd()				{ return m_hWnd; } 
     
    BOOL Init(HWND hWnd, HINSTANCE hInst); 
    BOOL Free(); 
}; 
 
class Keyboard 
{ 
protected: 
	Input				*m_pInput; 
	LPDIRECTINPUTDEVICE8 m_pKeyboard; 
 
	BYTE				m_State[256]; 
	BOOL				m_Lock[256]; 
public: 
 
	Keyboard():m_pInput(NULL),m_pKeyboard(NULL)  
	{ 
	 
	} 
	~Keyboard()  
	{  
		Free();  
	} 
 
	BOOL Init(Input *Input); 
	BOOL Free(); 
 
	BOOL Read(); 
 
	inline BOOL GetKeyState(BYTE i) 
	{ 
		return ( (m_State[i] & 0x80) && !m_Lock[i] ); 
	} 
	inline BOOL GetLock(BYTE i) 
	{ 
		return m_Lock[i]; 
	} 
	inline void SetLock(BYTE i,bool Lock = TRUE) 
	{ 
		m_Lock[i] = Lock; 
	} 
}; 
 
class Mouse 
{ 
protected: 
	Input			    *m_pInput; 
	LPDIRECTINPUTDEVICE8 m_pMouse; 
 
	BOOL				m_Windowed; 
 
	POINT				m_Pos; 
	DIMOUSESTATE        m_State; 
	BOOL				m_Lock[4]; 
public: 
	Mouse(): m_pInput(NULL),m_pMouse(NULL) {} 
	~Mouse() { Free(); } 
 
	Init(Input *Input,BOOL Windowed = TRUE); 
	Free(); 
 
	BOOL	Read(); 
 
	POINT	GetPosition()		{ return m_Pos;			} 
	int		GetDeltaX()			{ return m_State.lX;	} 
	int		GetDeltaY()			{ return m_State.lY;	} 
	int		GetDeltaWheel()		{ return m_State.lZ;	} 
	BOOL	GetKeyState(BYTE i) { return ( m_State.rgbButtons[i] && !m_Lock[i] ); } 
	BOOL	GetLock(BYTE i)		{ return m_Lock[i];	} 
	void	SetLock(BYTE i,bool Lock = TRUE)	{	m_Lock[i] = Lock;	} 
 
};