| Interface: KbdLayout Arquivos: kbdlayout.h Última atualização: 27/07/2002 Autor: Luiz Henrique Shigunov | Descrição Estruturas | 
| Funções | |
| 0x00 - GetMapTables - Obtém as tabelas de mapeamento | |
Esta página descreve a interface KbdLayout que trata do acesso aos layouts dos teclados.
É através das diversas tabelas definidas nesta interface que um módulo que implementar a interface Keyboard mapeia um scancode em virtual key e dessa para um caracter.
typedef struct {
    unsigned short charCode;
    unsigned short flags;
} KbdLayout_VKFlags;
Onde charCode é o caracter e flags deve ser:
typedef struct {
    union {
        struct {
            unsigned char firstVK;
            unsigned char firstShift;
            unsigned char nextVK;
            unsigned char nextShift;
        } vks;
        int all;
    } key;
    unsigned short charCode;
    unsigned short reserved;
} KbdLayout_VKDeadKey;
Onde firstVK é a primeira virtual key pressionada, firstShift é o estado do shift para firstVK, nextVK é a segunda virtual key pressionada e nextShift é o estado do shift para nextVK. charCode é o caracter gerado pela combinação.
firstShift e nextShift devem ser:
typedef struct {
    unsigned char sc2VK[128];
    unsigned char e0sc2VK[128];
    KbdLayout_VKFlags vk2CharN[256];
    unsigned short *vk2CharS[8];
    KbdLayout_VKDeadKey *deadKeys;
} KbdLayout_MapTables;
sc2VK é a tabela que mapeia os scancodes sem nenhum prefixo em virtual keys. Já e0sc2VK é a tabela que mapeia os scancodes com prefixo 0xe0 em virtual keys.
vk2CharN é a tabela que mapeia virtual keys em caracteres quando nenhum shift está pressionado.
vk2CharS é um vetor com as tabelas de mapeamento de virtual keys em caracteres. Ela é indexada pelo estado dos shifts:
Se uma dessas tabelas não tiver mapeamento o ponteiro deve ser NULL. Por exemplo, se não tiver uma tabela para Shift-Ctrl-Alt, vk2CharS[6] deve ser NULL.
Os seguintes caracteres especiais podem ser usados em vk2CharN e vk2CharS:
deadKeys é a tabela que mapeia as deadkeys em caracteres, NULL se não tiver essa tabela. A tabela dever terminar com um item totalmente igual a 0.
Se Capslock estiver ligado a tabela vk2CharN da estrutura MapTables será consultada para saber se a tecla capslock atua como shift na virtual key. A tecla shift cancela o comportamento da tecla capslock, ou seja, se capslock estiver ligado e a tecla shift também estiver pressionada é como se capslock estivesse desligado e a tecla shift não estivesse pressionada.
KbdLayout_MapTables *KbdLayout_GetMapTables(void);
Esta função obtém as tabelas de mapeamento para o layout do teclado.
As tabelas de mapeamento.