Accels.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #pragma once
  2. #include <map>
  3. #include ".\Shared\ArrayEx.h"
  4. #define ACCEL_VKEY(key) LOBYTE(key)
  5. #define ACCEL_MOD(key) HIBYTE(key)
  6. #define ACCEL_MAKEKEY(vkey,mod) ((mod << 8) | vkey)
  7. using namespace std;
  8. class CAccel
  9. {
  10. public:
  11. DWORD Key;
  12. DWORD Key2;
  13. DWORD Cmd;
  14. int RefId;
  15. CAccel(DWORD key = 0, DWORD cmd = 0, DWORD key2 = 0)
  16. {
  17. Key = key;
  18. Key2 = key2;
  19. Cmd = cmd;
  20. RefId = 0;
  21. }
  22. };
  23. /*------------------------------------------------------------------*\
  24. CAccels - Manages a set of CAccel
  25. \*------------------------------------------------------------------*/
  26. class CAccels
  27. {
  28. public:
  29. CAccels();
  30. void AddAccel(CAccel a);
  31. void AddAccel(DWORD cmd, DWORD key, DWORD key2 = 0);
  32. void RemoveAll();
  33. CString GetCmdKeyText(DWORD cmd);
  34. // handles a key's first WM_KEYDOWN or WM_SYSKEYDOWN message.
  35. // it uses GetKeyState to test for modifiers.
  36. // returns a pointer to the internal CAccel if it matches the given key or NULL
  37. bool OnMsg(MSG *pMsg, CAccel &a);
  38. bool m_handleRepeatKeys;
  39. bool m_checkModifierKeys;
  40. static BYTE GetKeyStateModifiers();
  41. protected:
  42. multimap<DWORD, CAccel> m_multiMap;
  43. DWORD m_activeFirstKey;
  44. DWORD m_firstMapTick;
  45. };