一種選擇是讓枚舉所有每個平臺上的可能的密鑰。然後,您可以使用系統本機格式處理應用程序中的鍵碼。你需要做一些微妙的事情來解決某些情況(如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