afInput.h
上传用户:kaiguan
上传日期:2007-10-28
资源大小:1074k
文件大小:10k
源码类别:

其他游戏

开发平台:

Visual C++

  1. // afInput.h: interface for the afInput class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #ifndef AF_INPUT
  5. #define AF_INPUT
  6. #pragma once
  7. class afInput  
  8. {
  9. public:
  10. /// Input type
  11. enum TYPE {
  12. KEYBOARD = 1, /**<  Creates a keyboard input device  */
  13. MOUSE = 2 /**<  Creates a mouse input device  */
  14. };
  15. /// Mouse Buttons
  16. enum BUTTON {
  17. BUTTON_LEFT = 1, /**<  Left mouse button  */
  18. BUTTON_MIDDLE = 2, /**<  Middle mouse button  */
  19. BUTTON_RIGHT = 4 /**<  Right mouse button  */
  20. };
  21. /// Key definitions (identical to dxinput)
  22. enum KEY {  KEY_ESCAPE          = 0x01, 
  23.  KEY_1               = 0x02, 
  24.  KEY_2               = 0x03, 
  25.  KEY_3               = 0x04, 
  26.  KEY_4               = 0x05, 
  27.  KEY_5               = 0x06, 
  28.  KEY_6               = 0x07, 
  29.  KEY_7               = 0x08, 
  30.  KEY_8               = 0x09, 
  31.  KEY_9               = 0x0A, 
  32.  KEY_0               = 0x0B, 
  33.  KEY_MINUS           = 0x0C,    /* - on main keyboard */
  34.  KEY_EQUALS          = 0x0D, 
  35.  KEY_BACK            = 0x0E,    /* backspace */
  36.  KEY_TAB             = 0x0F, 
  37.  KEY_Q               = 0x10, 
  38.  KEY_W               = 0x11, 
  39.  KEY_E               = 0x12, 
  40.  KEY_R               = 0x13, 
  41.  KEY_T               = 0x14, 
  42.  KEY_Y               = 0x15, 
  43.  KEY_U               = 0x16, 
  44.  KEY_I               = 0x17, 
  45.  KEY_O               = 0x18, 
  46.  KEY_P               = 0x19, 
  47.  KEY_LBRACKET        = 0x1A, 
  48.  KEY_RBRACKET        = 0x1B, 
  49.  KEY_RETURN          = 0x1C,    /* Enter on main keyboard */
  50.  KEY_LCONTROL        = 0x1D,
  51.  KEY_A               = 0x1E,
  52.  KEY_S               = 0x1F,
  53.  KEY_D               = 0x20,
  54.  KEY_F               = 0x21,
  55.  KEY_G               = 0x22,
  56.  KEY_H               = 0x23,
  57.  KEY_J               = 0x24,
  58.  KEY_K               = 0x25,
  59.  KEY_L               = 0x26,
  60.  KEY_SEMICOLON       = 0x27,
  61.  KEY_APOSTROPHE      = 0x28,
  62.  KEY_GRAVE           = 0x29,   /* accent grave */
  63.  KEY_LSHIFT          = 0x2A,
  64.  KEY_BACKSLASH       = 0x2B,
  65.  KEY_Z               = 0x2C,
  66.  KEY_X               = 0x2D,
  67.  KEY_C               = 0x2E,
  68.  KEY_V               = 0x2F,
  69.  KEY_B               = 0x30,
  70.  KEY_N               = 0x31,
  71.  KEY_M               = 0x32,
  72.  KEY_COMMA           = 0x33,
  73.  KEY_PERIOD          = 0x34,   /* . on main keyboard */
  74.  KEY_SLASH           = 0x35,   /* / on main keyboard */
  75.  KEY_RSHIFT          = 0x36,
  76.  KEY_MULTIPLY        = 0x37,   /* * on numeric keypad */
  77.  KEY_LMENU           = 0x38,   /* left Alt */
  78.  KEY_SPACE           = 0x39,
  79.  KEY_CAPITAL         = 0x3A,
  80.  KEY_F1              = 0x3B,
  81.  KEY_F2              = 0x3C,
  82.  KEY_F3              = 0x3D,
  83.  KEY_F4              = 0x3E,
  84.  KEY_F5              = 0x3F,
  85.  KEY_F6              = 0x40,
  86.  KEY_F7              = 0x41,
  87.  KEY_F8              = 0x42,
  88.  KEY_F9              = 0x43,
  89.  KEY_F10             = 0x44,
  90.  KEY_NUpgOCK         = 0x45,
  91.  KEY_SCROLL          = 0x46,   /* Scroll Lock */
  92.  KEY_NUMPAD7         = 0x47,
  93.  KEY_NUMPAD8         = 0x48,
  94.  KEY_NUMPAD9         = 0x49,
  95.  KEY_SUBTRACT        = 0x4A,   /* - on numeric keypad */
  96.  KEY_NUMPAD4         = 0x4B,
  97.  KEY_NUMPAD5         = 0x4C,
  98.  KEY_NUMPAD6         = 0x4D,
  99.  KEY_ADD             = 0x4E,   /* + on numeric keypad */
  100.  KEY_NUMPAD1         = 0x4F,
  101.  KEY_NUMPAD2         = 0x50,
  102.  KEY_NUMPAD3         = 0x51,
  103.  KEY_NUMPAD0         = 0x52,
  104.  KEY_DECIMAL         = 0x53,   /* . on numeric keypad */
  105.  KEY_OEM_102         = 0x56,   /* <> or | on RT 102-key keyboard (Non-U.S.) */
  106.  KEY_F11             = 0x57,
  107.  KEY_F12             = 0x58,
  108.  KEY_F13             = 0x64,   /*                     (NEC PC98) */
  109.  KEY_F14             = 0x65,   /*                     (NEC PC98) */
  110.  KEY_F15             = 0x66,   /*                     (NEC PC98) */
  111.  KEY_KANA            = 0x70,   /* (Japanese keyboard)            */
  112.  KEY_ABNT_C1         = 0x73,   /* /? on Brazilian keyboard */
  113.  KEY_CONVERT         = 0x79,   /* (Japanese keyboard)            */
  114.  KEY_NOCONVERT       = 0x7B,   /* (Japanese keyboard)            */
  115.  KEY_YEN             = 0x7D,   /* (Japanese keyboard)            */
  116.  KEY_ABNT_C2         = 0x7E,   /* Numpad . on Brazilian keyboard */
  117.  KEY_NUMPADEQUALS    = 0x8D,   /* = on numeric keypad (NEC PC98) */
  118.  KEY_PREVTRACK       = 0x90,   /* Previous Track (KEY_CIRCUMFLEX on Japanese keyboard) */
  119.  KEY_AT              = 0x91,   /*                     (NEC PC98) */
  120.  KEY_COLON           = 0x92,   /*                     (NEC PC98) */
  121.  KEY_UNDERLINE       = 0x93,   /*                     (NEC PC98) */
  122.  KEY_KANJI           = 0x94,   /* (Japanese keyboard)            */
  123.  KEY_STOP            = 0x95,   /*                     (NEC PC98) */
  124.  KEY_AX              = 0x96,   /*                     (Japan AX) */
  125.  KEY_UNLABELED       = 0x97,   /*                        (J3100) */
  126.  KEY_NEXTTRACK       = 0x99,   /* Next Track */
  127.  KEY_NUMPADENTER     = 0x9C,   /* Enter on numeric keypad */
  128.  KEY_RCONTROL        = 0x9D,
  129.  KEY_MUTE            = 0xA0,   /* Mute */
  130.  KEY_CALCULATOR      = 0xA1,   /* Calculator */
  131.  KEY_PLAYPAUSE       = 0xA2,   /* Play / Pause */
  132.  KEY_MEDIASTOP       = 0xA4,   /* Media Stop */
  133.  KEY_VOLUMEDOWN      = 0xAE,   /* Volume - */
  134.  KEY_VOLUMEUP        = 0xB0,   /* Volume + */
  135.  KEY_WEBHOME         = 0xB2,   /* Web home */
  136.  KEY_NUMPADCOMMA     = 0xB3,   /*   on numeric keypad (NEC PC98) */
  137.  KEY_DIVIDE          = 0xB5,   /* / on numeric keypad */
  138.  KEY_SYSRQ           = 0xB7,
  139.  KEY_RMENU           = 0xB8,   /* right Alt */
  140.  KEY_PAUSE           = 0xC5,   /* Pause */
  141.  KEY_HOME            = 0xC7,   /* Home on arrow keypad */
  142.  KEY_UP              = 0xC8,   /* UpArrow on arrow keypad */
  143.  KEY_PRIOR           = 0xC9,   /* PgUp on arrow keypad */
  144.  KEY_LEFT            = 0xCB,   /* LeftArrow on arrow keypad */
  145.  KEY_RIGHT           = 0xCD,   /* RightArrow on arrow keypad */
  146.  KEY_END             = 0xCF,   /* End on arrow keypad */
  147.  KEY_DOWN            = 0xD0,   /* DownArrow on arrow keypad */
  148.  KEY_NEXT            = 0xD1,   /* PgDn on arrow keypad */
  149.  KEY_INSERT          = 0xD2,   /* Insert on arrow keypad */
  150.  KEY_DELETE          = 0xD3,   /* Delete on arrow keypad */
  151.  KEY_LWIN            = 0xDB,   /* Left Windows key */
  152.  KEY_RWIN            = 0xDC,   /* Right Windows key */
  153.  KEY_APPS            = 0xDD,   /* AppMenu key */
  154.  KEY_POWER           = 0xDE,   /* System Power */
  155.  KEY_SLEEP           = 0xDF,   /* System Sleep */
  156.  KEY_WAKE            = 0xE3,   /* System Wake */
  157.  KEY_WEBSEARCH       = 0xE5,   /* Web Search */
  158.  KEY_WEBFAVORITES    = 0xE6,   /* Web Favorites */
  159.  KEY_WEBREFRESH      = 0xE7,   /* Web Refresh */
  160.  KEY_WEBSTOP         = 0xE8,   /* Web Stop */
  161.  KEY_WEBFORWARD      = 0xE9,   /* Web Forward */
  162.  KEY_WEBBACK         = 0xEA,   /* Web Back */
  163.  KEY_MYCOMPUTER      = 0xEB,   /* My Computer */
  164.  KEY_MAIL            = 0xEC,   /* Mail */
  165.  KEY_MEDIASELECT     = 0xED,   /* Media Select */
  166. /*
  167.  *  Alternate names for keys  to facilitate transition from DOS.
  168.  */
  169.  KEY_BACKSPACE       = KEY_BACK,           /* backspace */
  170.  KEY_NUMPADSTAR      = KEY_MULTIPLY,       /* * on numeric keypad */
  171.  KEY_LALT            = KEY_LMENU,          /* left Alt */
  172.  KEY_CAPSLOCK        = KEY_CAPITAL,        /* CapsLock */
  173.  KEY_NUMPADMINUS     = KEY_SUBTRACT,       /* - on numeric keypad */
  174.  KEY_NUMPADPLUS      = KEY_ADD,            /* + on numeric keypad */
  175.  KEY_NUMPADPERIOD    = KEY_DECIMAL,        /* . on numeric keypad */
  176.  KEY_NUMPADSLASH     = KEY_DIVIDE,         /* / on numeric keypad */
  177.  KEY_RALT            = KEY_RMENU,          /* right Alt */
  178.  KEY_UPARROW         = KEY_UP,             /* UpArrow on arrow keypad */
  179.  KEY_PGUP            = KEY_PRIOR,          /* PgUp on arrow keypad */
  180.  KEY_LEFTARROW       = KEY_LEFT,           /* LeftArrow on arrow keypad */
  181.  KEY_RIGHTARROW      = KEY_RIGHT,          /* RightArrow on arrow keypad */
  182.  KEY_DOWNARROW       = KEY_DOWN,           /* DownArrow on arrow keypad */
  183.  KEY_PGDN            = KEY_NEXT,           /* PgDn on arrow keypad */
  184.  KEY_MOUSE_LEFT      = 0xf0,               /* Left mouse button */
  185.  KEY_MOUSE_MIDDLE    = 0xf1,               /* Middle mouse button */
  186.  KEY_MOUSE_RIGHT     = 0xf2,               /* Right mouse button */
  187.  KEY_UNSET           = 0xfe,
  188.  KEY_UNDEFINED       = 0xff
  189. };
  190. afInput();
  191. // implementation of pgInput interface
  192.     bool init(int nTypes, HINSTANCE hInst, HWND hWnd);
  193. void cleanup();
  194.     void update();
  195.     bool isKeyDown(KEY nKey) const;
  196. bool isKeyNewDown(KEY nKey) const;
  197. void processWindowMsg(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  198. int getMouseX() const  {  return mouseX;  }
  199. int getMouseY() const  {  return mouseY;  }
  200. bool isButtonDown(BUTTON nButton) const  {  return (mouseB&nButton)!=0;  }
  201. protected:
  202. void updateMouseAcquire();
  203. LPDIRECTINPUT8 m_pDI;
  204. LPDIRECTINPUTDEVICE8 m_pDIDeviceKB, m_pDIDeviceMouse;
  205. HANDLE                  hMouseEvent;
  206. unsigned char *keyBuffer, // stores the current keys
  207. *oldKeyBuffer; // stores the keys of the previous frame
  208. int mouseX, mouseY, mouseB; // mouse x,y & buttons
  209. bool windowActive;
  210. HINSTANCE hInst;
  211. HWND hWnd;
  212. int types;
  213. };
  214. #endif