C++中利用 类似python的字典将 键盘的虚拟键码和英文名进行关联起来组成键值对具体怎么实现然后可以用键值找出键名 然后键名找键值具体怎么实现 头文件和源文件都写一下
头文件:
#ifndef KEY_MAPPING_H
#define KEY_MAPPING_H
#include <map>
#include <string>
class KeyMapping {
public:
KeyMapping();
~KeyMapping();
int getKeyCode(std::string keyName);
std::string getKeyName(int keyCode);
private:
std::map<std::string, int> nameToCode;
std::map<int, std::string> codeToName;
};
#endif // KEY_MAPPING_H
源文件:
#include "KeyMapping.h"
KeyMapping::KeyMapping() {
// 初始化键值对
nameToCode["backspace"] = 8;
nameToCode["tab"] = 9;
nameToCode["enter"] = 13;
nameToCode["shift"] = 16;
nameToCode["ctrl"] = 17;
nameToCode["alt"] = 18;
nameToCode["pause"] = 19;
nameToCode["caps lock"] = 20;
nameToCode["escape"] = 27;
nameToCode["space"] = 32;
nameToCode["page up"] = 33;
nameToCode["page down"] = 34;
nameToCode["end"] = 35;
nameToCode["home"] = 36;
nameToCode["left arrow"] = 37;
nameToCode["up arrow"] = 38;
nameToCode["right arrow"] = 39;
nameToCode["down arrow"] = 40;
nameToCode["insert"] = 45;
nameToCode["delete"] = 46;
nameToCode["0"] = 48;
nameToCode["1"] = 49;
nameToCode["2"] = 50;
nameToCode["3"] = 51;
nameToCode["4"] = 52;
nameToCode["5"] = 53;
nameToCode["6"] = 54;
nameToCode["7"] = 55;
nameToCode["8"] = 56;
nameToCode["9"] = 57;
nameToCode["a"] = 65;
nameToCode["b"] = 66;
nameToCode["c"] = 67;
nameToCode["d"] = 68;
nameToCode["e"] = 69;
nameToCode["f"] = 70;
nameToCode["g"] = 71;
nameToCode["h"] = 72;
nameToCode["i"] = 73;
nameToCode["j"] = 74;
nameToCode["k"] = 75;
nameToCode["l"] = 76;
nameToCode["m"] = 77;
nameToCode["n"] = 78;
nameToCode["o"] = 79;
nameToCode["p"] = 80;
nameToCode["q"] = 81;
nameToCode["r"] = 82;
nameToCode["s"] = 83;
nameToCode["t"] = 84;
nameToCode["u"] = 85;
nameToCode["v"] = 86;
nameToCode["w"] = 87;
nameToCode["x"] = 88;
nameToCode["y"] = 89;
nameToCode["z"] = 90;
nameToCode["left window"] = 91;
nameToCode["right window"] = 92;
nameToCode["select"] = 93;
nameToCode["numpad 0"] = 96;
nameToCode["numpad 1"] = 97;
nameToCode["numpad 2"] = 98;
nameToCode["numpad 3"] = 99;
nameToCode["numpad 4"] = 100;
nameToCode["numpad 5"] = 101;
nameToCode["numpad 6"] = 102;
nameToCode["numpad 7"] = 103;
nameToCode["numpad 8"] = 104;
nameToCode["numpad 9"] = 105;
nameToCode["multiply"] = 106;
nameToCode["add"] = 107;
nameToCode["subtract"] = 109;
nameToCode["decimal point"] = 110;
nameToCode["divide"] = 111;
nameToCode["f1"] = 112;
nameToCode["f2"] = 113;
nameToCode["f3"] = 114;
nameToCode["f4"] = 115;
nameToCode["f5"] = 116;
nameToCode["f6"] = 117;
nameToCode["f7"] = 118;
nameToCode["f8"] = 119;
nameToCode["f9"] = 120;
nameToCode["f10"] = 121;
nameToCode["f11"] = 122;
nameToCode["f12"] = 123;
nameToCode["num lock"] = 144;
nameToCode["scroll lock"] = 145;
nameToCode["semi-colon"] = 186;
nameToCode["equal sign"] = 187;
nameToCode["comma"] = 188;
nameToCode["dash"] = 189;
nameToCode["period"] = 190;
nameToCode["forward slash"] = 191;
nameToCode["grave accent"] = 192;
nameToCode["open bracket"] = 219;
nameToCode["back slash"] = 220;
nameToCode["close bracket"] = 221;
nameToCode["single quote"] = 222;
// 反转键值对
for (auto it = nameToCode.begin(); it != nameToCode.end(); ++it) {
codeToName[it->second] = it->first;
}
}
KeyMapping::~KeyMapping() {}
int KeyMapping::getKeyCode(std::string keyName) {
auto it = nameToCode.find(keyName);
if (it != nameToCode.end()) {
return it->second;
}
return -1;
}
std::string KeyMapping::getKeyName(int keyCode) {
auto it = codeToName.find(keyCode);
if (it != codeToName.end()) {
return it->second;
}
return "";
}
使用方法:
#include <iostream>
#include "KeyMapping.h"
int main() {
KeyMapping keyMapping;
int keyCode = keyMapping.getKeyCode("a");
std::cout << "The key code of 'a' is: " << keyCode << std::endl;
std::string keyName = keyMapping.getKeyName(65);
std::cout << "The key name of 65 is: " << keyName << std::endl;
return 0;
}
``
原文地址: https://www.cveoy.top/t/topic/ckRZ 著作权归作者所有。请勿转载和采集!