You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
270 lines
5.4 KiB
270 lines
5.4 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef KEYBOARD_H |
|
#define KEYBOARD_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
|
|
#define KEY_MOD_SHIFT 0x0001 |
|
#define KEY_MOD_CONTROL 0x0002 |
|
#define KEY_MOD_ALT 0x0004 |
|
|
|
|
|
// |
|
// Defines the maximum number of physical keys. These physical keys correspond to |
|
// the windows virtual key codes shown below. Missing key codes may be up for grabs, |
|
// but it is probably safer to add to the end of the list. |
|
// |
|
#define MAX_PHYSICAL_KEYS 256 |
|
|
|
// |
|
// VK_LBUTTON 0x01 |
|
// VK_RBUTTON 0x02 |
|
// VK_CANCEL 0x03 |
|
// VK_MBUTTON 0x04 |
|
// ? 0x04 |
|
// ? 0x05 |
|
// ? 0x06 |
|
// ? 0x07 |
|
// VK_BACK 0x08 |
|
// VK_TAB 0x09 |
|
// ? 0x0A |
|
// ? 0x0B |
|
// VK_CLEAR 0x0C |
|
// VK_RETURN 0x0D |
|
// ? 0x0E |
|
// ? 0x0F |
|
// VK_SHIFT 0x10 |
|
// VK_CONTROL 0x11 |
|
// VK_MENU 0x12 |
|
// VK_PAUSE 0x13 |
|
// VK_CAPITAL 0x14 |
|
// VK_KANA 0x15 |
|
// VK_HANGUL 0x15 |
|
// VK_JUNJA 0x17 |
|
// VK_FINAL 0x18 |
|
// VK_KANJI 0x19 |
|
// ? 0x1A |
|
// VK_ESCAPE 0x1B |
|
// VK_CONVERT 0x1C |
|
// VK_NONCONVERT 0x1D |
|
// VK_ACCEPT 0x1E |
|
// VK_MODECHANGE 0x1F |
|
// VK_SPACE 0x20 |
|
// VK_PRIOR 0x21 |
|
// VK_NEXT 0x22 |
|
// VK_END 0x23 |
|
// VK_HOME 0x24 |
|
// VK_LEFT 0x25 |
|
// VK_UP 0x26 |
|
// VK_RIGHT 0x27 |
|
// VK_DOWN 0x28 |
|
// VK_SELECT 0x29 |
|
// VK_PRINT 0x2A |
|
// VK_EXECUTE 0x2B |
|
// VK_SNAPSHOT 0x2C |
|
// VK_INSERT 0x2D |
|
// VK_DELETE 0x2E |
|
// VK_HELP 0x2F |
|
// |
|
// VK_0 thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39) |
|
// |
|
// VK_0 0x30 |
|
// VK_1 0x31 |
|
// VK_2 0x32 |
|
// VK_3 0x33 |
|
// VK_4 0x34 |
|
// VK_5 0x35 |
|
// VK_6 0x36 |
|
// VK_7 0x37 |
|
// VK_8 0x38 |
|
// VK_9 0x39 |
|
// ? 0x40 |
|
// |
|
// VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' (0x41 - 0x5A) |
|
// |
|
// VK_A 0X41 |
|
// VK_B 0X42 |
|
// VK_C 0X43 |
|
// VK_D 0X44 |
|
// VK_E 0X45 |
|
// VK_F 0X46 |
|
// VK_G 0X47 |
|
// VK_H 0X48 |
|
// VK_I 0X49 |
|
// VK_J 0X4A |
|
// VK_K 0X4B |
|
// VK_L 0X4C |
|
// VK_M 0X4D |
|
// VK_N 0X4E |
|
// VK_O 0X4F |
|
// VK_P 0X50 |
|
// VK_Q 0X51 |
|
// VK_R 0X52 |
|
// VK_S 0X53 |
|
// VK_T 0X54 |
|
// VK_U 0X55 |
|
// VK_V 0X56 |
|
// VK_W 0X57 |
|
// VK_X 0X58 |
|
// VK_Y 0X59 |
|
// VK_Z 0X5A |
|
// VK_LWIN 0x5B |
|
// VK_RWIN 0x5C |
|
// VK_APPS 0x5D |
|
// ? 0x5E |
|
// ? 0x5F |
|
// VK_NUMPAD0 0x60 |
|
// VK_NUMPAD1 0x61 |
|
// VK_NUMPAD2 0x62 |
|
// VK_NUMPAD3 0x63 |
|
// VK_NUMPAD4 0x64 |
|
// VK_NUMPAD5 0x65 |
|
// VK_NUMPAD6 0x66 |
|
// VK_NUMPAD7 0x67 |
|
// VK_NUMPAD8 0x68 |
|
// VK_NUMPAD9 0x69 |
|
// VK_MULTIPLY 0x6A |
|
// VK_ADD 0x6B |
|
// VK_SEPARATOR 0x6C |
|
// VK_SUBTRACT 0x6D |
|
// VK_DECIMAL 0x6E |
|
// VK_DIVIDE 0x6F |
|
// |
|
// Function keys |
|
// |
|
// VK_F1 0x70 |
|
// VK_F2 0x71 |
|
// VK_F3 0x72 |
|
// VK_F4 0x73 |
|
// VK_F5 0x74 |
|
// VK_F6 0x75 |
|
// VK_F7 0x76 |
|
// VK_F8 0x77 |
|
// VK_F9 0x78 |
|
// VK_F10 0x79 |
|
// VK_F11 0x7A |
|
// VK_F12 0x7B |
|
// VK_F13 0x7C |
|
// VK_F14 0x7D |
|
// VK_F15 0x7E |
|
// VK_F16 0x7F |
|
// VK_F17 0x80 |
|
// VK_F18 0x81 |
|
// VK_F19 0x82 |
|
// VK_F20 0x83 |
|
// VK_F21 0x84 |
|
// VK_F22 0x85 |
|
// VK_F23 0x86 |
|
// VK_F24 0x87 |
|
// ? 0x88 |
|
// ? 0x89 |
|
// ? 0x8A |
|
// ? 0x8B |
|
// ? 0x8C |
|
// ? 0x8D |
|
// ? 0x8E |
|
// ? 0x8F |
|
// VK_NUMLOCK 0x90 |
|
// VK_SCROLL 0x91 |
|
// ? 0x92 |
|
// ? 0x93 |
|
// ? 0x94 |
|
// ? 0x95 |
|
// ? 0x96 |
|
// ? 0x97 |
|
// ? 0x98 |
|
// ? 0x99 |
|
// ? 0x9A |
|
// ? 0x9B |
|
// ? 0x9C |
|
// ? 0x9D |
|
// ? 0x9E |
|
// ? 0x9F |
|
// |
|
// VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys. |
|
// Used only as parameters to GetAsyncKeyState() and GetKeyState(). |
|
// No other API or message will distinguish left and right keys in this way. |
|
// |
|
// VK_LSHIFT 0xA0 |
|
// VK_RSHIFT 0xA1 |
|
// VK_LCONTROL 0xA2 |
|
// VK_RCONTROL 0xA3 |
|
// VK_LMENU 0xA4 |
|
// VK_RMENU 0xA5 |
|
// VK_PROCESSKEY 0xE5 |
|
// VK_ATTN 0xF6 |
|
// VK_CRSEL 0xF7 |
|
// VK_EXSEL 0xF8 |
|
// VK_EREOF 0xF9 |
|
// VK_PLAY 0xFA |
|
// VK_ZOOM 0xFB |
|
// VK_NONAME 0xFC |
|
// VK_PA1 0xFD |
|
// VK_OEM_CLEAR 0xFE |
|
// |
|
|
|
|
|
// |
|
// Defines the maximum number of logical keys. Logical keys are application-specific |
|
// values that are associated with physical keys via AddKeyMap. |
|
// |
|
#define MAX_LOGICAL_KEYS 256 |
|
|
|
|
|
// |
|
// Defines the maximum number of unique key bindings. |
|
// |
|
#define MAX_KEYMAPS 256 |
|
|
|
|
|
typedef struct |
|
{ |
|
unsigned int uChar; |
|
unsigned int uModifierKeys; |
|
unsigned int uLogicalKey; |
|
} KeyMap_t; |
|
|
|
|
|
class CKeyboard |
|
{ |
|
public: |
|
|
|
CKeyboard(void); |
|
~CKeyboard(void); |
|
|
|
void AddKeyMap(unsigned int uChar, unsigned int uModifierKeys, unsigned int uLogicalKey); |
|
void ClearImpulseFlags(void); |
|
void ClearKeyStates(void); |
|
float GetKeyScale(unsigned int uLogicalKey); |
|
|
|
void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); |
|
void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); |
|
|
|
void RemoveAllKeyMaps(void); |
|
|
|
protected: |
|
|
|
bool IsKeyPressed(unsigned int uChar, unsigned int uModifierKeys); |
|
bool IsModifierKey(unsigned int uChar); |
|
|
|
unsigned int GetModifierKeyBit(unsigned int uChar); |
|
|
|
void UpdateLogicalKeys(unsigned int uChar, bool bPressed); |
|
|
|
unsigned int g_uPhysicalKeyState[MAX_PHYSICAL_KEYS]; |
|
unsigned int g_uLogicalKeyState[MAX_LOGICAL_KEYS]; |
|
|
|
KeyMap_t g_uKeyMap[MAX_KEYMAPS]; |
|
unsigned int g_uKeyMaps; |
|
}; |
|
|
|
|
|
#endif // KEYBOARD_H
|
|
|