2013-02-20 1 views
2

Как преобразовать код ключа X11 в опцию microsoft virtual key codeКак преобразовать XLib keycode в виртуальный ключ Microsoft?

int processKeyboardMessage(XEvent *event) 
{ 
    assert(KeyPress == event->type); 

    //TODO: Before returning convert keycode into microsoft virtual key code  
    return (event->xkey.keycode); 
} 
+0

Почему вы хотите использовать виртуальные ключевые коды MS, а не X keysyms? – parkydr

+0

это многоплатформенный проект. Я буду получать ключи от X. Мне нужно перевести их в MS Virtual Keycodes для обработки в другой системе. – JonnyRo

+0

Возможно, самое лучшее, что вы можете сделать, это преобразовать X-код ключа в X keysym, а затем отобразить их сами. – parkydr

ответ

1

One, чтобы сделать перечисления для всех возможных ключей на каждой платформе. Затем вы можете обращаться с ключевыми кодами в приложении в собственном формате системы. Есть некоторые тонкие вещи, которые вам нужно сделать, чтобы работать над определенными ситуациями (например, left/right alt на win32), но вы можете реализовать эти особые случаи и обновить их перечисление для них. Вместо создания больших таблиц или операторов case-case на каждой платформе.

/* 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