WM_CHAR mensagem

Postado na janela com o foco do teclado quando uma mensagem WM_KEYDOWN é traduzida pela função TranslateMessage . A mensagem WM_CHAR contém o código de caractere da tecla que foi pressionada.

#define WM_CHAR                         0x0102

Parameters

wParam

O código de caractere da chave.

lParam

A contagem de repetições, o código de verificação, o sinalizador de chave estendida, o código de contexto, o sinalizador de estado de chave anterior e o sinalizador de estado de transição, conforme mostrado na tabela a seguir.

Bits Meaning
0-15 A contagem de repetição da mensagem atual. O valor é o número de vezes que o pressionamento de tecla é repetido automaticamente como resultado do usuário que mantém a tecla pressionada. Se o pressionamento de teclas for mantido por tempo suficiente, várias mensagens serão enviadas. No entanto, a contagem de repetição não é cumulativa.
16-23 O código de verificação. O valor depende do OEM.
24 Indica se a tecla é uma tecla estendida, como as teclas ALT e CTRL à direita que aparecem em um teclado avançado de 101 ou 102 teclas. O valor será 1 se for uma tecla estendida; caso contrário, é 0.
25-27 Reservado; não use.
28 O sinalizador do modo de menu. O valor será 1 se um menu estiver ativo; caso contrário, o valor é 0.
29 O código de contexto. O valor será 1 se a tecla ALT for mantida pressionada enquanto a tecla for pressionada; caso contrário, o valor será 0.
30 O estado da chave anterior. O valor será 1 se a tecla estiver pressionada antes do envio da mensagem, ou 0 se a tecla não estiver pressionada.
31 O estado de transição. O valor será 1 se a tecla estiver sendo liberada, ou 0 se a tecla estiver sendo pressionada.

Para obter mais detalhes, consulte Sinalizadores de Mensagem de Pressionamento de Teclas.

Valor de retorno

Um aplicativo deverá retornar zero se processar essa mensagem.

Example

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
   
    // ...

    case WM_CHAR:
        OnKeyPress(wParam);
        break;

    default:
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}

Exemplo de de Exemplos Clássicos do Windows no GitHub.

Remarks

A mensagem WM_CHAR usa unidades de código UTF-16 (Formato de Transformação Unicode de 16 bits) em seu wParam se a versão Unicode da função RegisterClass foi usada para registrar a classe de janela. Caso contrário, o sistema fornece caracteres na página de código do processo atual, que pode ser definida como UTF-8 no Windows Versão 1903 (Atualização de maio de 2019) e mais recente. Para obter mais informações, consulte Registrar classes de janela e usar páginas de código UTF-8 em aplicativos Windows.

Começando com Windows Vista, WM_CHAR mensagem pode enviar pares alternativos UTF-16 para janelas Unicode. Use as macros IS_HIGH_SURROGATE, IS_LOW_SURROGATE e IS_SURROGATE_PAIR para detectar esses casos, se necessário.

Não há necessariamente uma correspondência um-para-um entre chaves pressionadas e mensagens de caractere geradas e, portanto, as informações na palavra de alta ordem do parâmetro lParam geralmente não são úteis para aplicativos. As informações na palavra de alta ordem se aplicam apenas à mensagem de WM_KEYDOWN mais recente que precede a postagem da mensagem WM_CHAR .

Para teclados avançados de 101 e 102 teclas, as teclas estendidas são alt direita e as teclas CTRL direitas na seção principal do teclado; as teclas INS, DEL, HOME, END, PAGE UP, PAGE DOWN e seta nos clusters à esquerda do teclado numérico; e as teclas divide (/) e ENTER no teclado numérico. Alguns outros teclados podem dar suporte ao bit de tecla estendida no parâmetro lParam .

A mensagem WM_UNICHAR é a mesma que WM_CHAR, exceto que usa UTF-32. Ele foi projetado para enviar ou postar caracteres Unicode para janelas ANSI e pode lidar com caracteres de Plano Suplementar Unicode.

Requirements

Requirement Value
Cliente mínimo suportado
Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho
Winuser.h (inclua Windows.h)

Consulte também