一种选择是让枚举所有每个平台上的可能的密钥。然后,您可以使用系统本机格式处理应用程序中的键码。你需要做一些微妙的事情来解决某些情况(如win32上的左/右ALT),但是你可以实现这些特殊情况并更新你的枚举。而不是在每个平台上创建大型表格或开关盒语句。
/* my_key.h : creates names for key codes on Windows and X11 */
#ifndef MY_KEY_H
#define MY_KEY_H
#if defined(_WIN32)
#include <windows.h>
enum my_key {
MY_KEY_BACKSPACE = VK_BACK,
MY_KEY_RETURN = VK_RETURN,
MY_KEY_LEFT = VK_LEFT,
MY_KEY_RIGHT = VK_RIGHT,
MY_KEY_DOWN = VK_DOWN,
MY_KEY_UP = VK_UP,
/* TODO: define the rest of the keys */
};
#else defined(__APPLE__)
enum my_key {
MY_KEY_BACKSPACE = 0x33,
MY_KEY_RETURN = 0x24,
MY_KEY_LEFT = 0x7b,
MY_KEY_RIGHT = 0x7c,
MY_KEY_DOWN = 0x7d,
MY_KEY_UP = 0x7e,
/* TODO: define the rest of the keys */
};
#else /* assume X11 */
#include <X11/keysym.h>
enum my_key {
MY_KEY_BACKSPACE = XK_BackSpace,
MY_KEY_RETURN = XK_Linefeed,
MY_KEY_LEFT = XK_Left,
MY_KEY_RIGHT = XK_Right,
MY_KEY_DOWN = XK_Down,
MY_KEY_UP = XK_Up,
/* TODO: define the rest of the keys */
};
#endif
#endif
为什么要使用MS虚拟键码而不是X keysyms? – parkydr 2013-02-20 20:56:30
这是一个多平台项目。我将从X接收密钥。我需要将它们转换为MS虚拟密钥才能在另一个系统中处理。 – JonnyRo 2013-02-21 05:03:37
可能最好的做法是将X键码转换为X键盘,然后自己映射它们。 – parkydr 2013-02-21 08:18:11