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

Parâmetros

wParam

O código de caractere da chave.

lParam

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

Bits Significado
0-15 A contagem de repetição para a 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-28 Reservados; não use.
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 tecla.

Valor retornado

Um aplicativo deverá retornar zero se processar essa mensagem.

Exemplo

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 das Amostras do Windows Classic no GitHub.

Comentários

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 na Versão 1903 do Windows (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.

A partir do 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 as teclas pressionadas e as 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 a ALT direita e as teclas CTRL direitas na seção main 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.

Requisitos

Requisito Valor
Cliente mínimo com suporte
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)

Confira também