Accels.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. CString RefData;
  16. CAccel(DWORD key = 0, DWORD cmd = 0, DWORD key2 = 0, CString refData = _T(""))
  17. {
  18. Key = key;
  19. Key2 = key2;
  20. Cmd = cmd;
  21. RefId = 0;
  22. RefData = refData;
  23. }
  24. };
  25. /*------------------------------------------------------------------*\
  26. CAccels - Manages a set of CAccel
  27. \*------------------------------------------------------------------*/
  28. class CAccels
  29. {
  30. public:
  31. CAccels();
  32. void AddAccel(CAccel a);
  33. void AddAccel(DWORD cmd, DWORD key, DWORD key2 = 0, CString refData = _T(""));
  34. void RemoveAll();
  35. CString GetCmdKeyText(DWORD cmd);
  36. // handles a key's first WM_KEYDOWN or WM_SYSKEYDOWN message.
  37. // it uses GetKeyState to test for modifiers.
  38. // returns a pointer to the internal CAccel if it matches the given key or NULL
  39. bool OnMsg(MSG *pMsg, CAccel &a);
  40. bool ContainsKey(int vKey);
  41. bool m_handleRepeatKeys;
  42. bool m_checkModifierKeys;
  43. static BYTE GetKeyStateModifiers();
  44. protected:
  45. multimap<DWORD, CAccel> m_multiMap;
  46. DWORD m_activeFirstKey;
  47. DWORD m_firstMapTick;
  48. };