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.