37 using VirtualKeyToKeySymbolMap = std::map<uint16_t, vsg::KeySymbol>;
39 bool getKeySymbol(WPARAM wParam, LPARAM lParam, vsg::KeySymbol& keySymbol, vsg::KeySymbol& modifiedKeySymbol, vsg::KeyModifier& keyModifier)
41 uint16_t modifierMask = 0;
42 uint32_t virtualKey = ::MapVirtualKeyEx((lParam >> 16) & 0xff, MAPVK_VSC_TO_VK_EX, ::GetKeyboardLayout(0));
43 auto itr = _vk2vsg.find(virtualKey);
45 if (itr == _vk2vsg.end())
53 keySymbol = itr->second;
57 if (virtualKey == 0 || !::GetKeyboardState(keyState))
69 modifierMask |= vsg::KeyModifier::MODKEY_Shift;
74 modifierMask |= vsg::KeyModifier::MODKEY_Control;
79 modifierMask |= vsg::KeyModifier::MODKEY_Alt;
83 virtualKey =
static_cast<int>(wParam);
88 if (keyState[VK_CAPITAL] & 0x01) modifierMask |= vsg::KeyModifier::MODKEY_CapsLock;
89 if (keyState[VK_NUMLOCK] & 0x01) modifierMask |= vsg::KeyModifier::MODKEY_NumLock;
93 if (keyState[VK_LSHIFT] & 0x80) modifierMask |= vsg::KeyModifier::MODKEY_Shift;
94 if (keyState[VK_RSHIFT] & 0x80) modifierMask |= vsg::KeyModifier::MODKEY_Shift;
95 if (keyState[VK_LCONTROL] & 0x80) modifierMask |= vsg::KeyModifier::MODKEY_Control;
96 if (keyState[VK_RCONTROL] & 0x80) modifierMask |= vsg::KeyModifier::MODKEY_Control;
97 if (keyState[VK_LMENU] & 0x80) modifierMask |= vsg::KeyModifier::MODKEY_Alt;
98 if (keyState[VK_RMENU] & 0x80) modifierMask |= vsg::KeyModifier::MODKEY_Alt;
101 keyModifier =
static_cast<vsg::KeyModifier
>(modifierMask);
105 int32_t numChars = ::ToAscii(
static_cast<UINT
>(wParam), (lParam >> 16) & 0xff, keyState,
reinterpret_cast<WORD*
>(asciiKey), 0);
109 modifiedKeySymbol =
static_cast<vsg::KeySymbol
>(asciiKey[0]);
114 modifiedKeySymbol = keySymbol;
121 VirtualKeyToKeySymbolMap _vk2vsg;