mensaje de WM_CHAR

Se publica en la ventana con el foco del teclado cuando la función TranslateMessage traduce un mensaje de WM_KEYDOWN. El mensaje WM_CHAR contiene el código de carácter de la tecla que se presionó.

#define WM_CHAR                         0x0102

Parámetros

wParam

Código de carácter de la clave.

lParam

Recuento de repeticiones, código de examen, marca de clave extendida, código de contexto, marca de estado de clave anterior y marca de estado de transición, como se muestra en la tabla siguiente.

Bits Significado
0-15 Recuento de repeticiones para el mensaje actual. El valor es el número de veces que se repite la pulsación de tecla como resultado de que el usuario mantenga presionada la tecla. Si la tecla se mantiene presionada durante un tiempo suficiente, se envían varios mensajes. Sin embargo, el recuento de repeticiones no es acumulativo.
16-23 El código de examen. El valor depende del OEM.
24 Indica si la tecla es una tecla extendida, como las teclas ALT y CTRL de la derecha que aparecen en un teclado mejorado de 101 o 102 teclas. El valor es 1 si es una tecla extendida; de lo contrario, es 0.
25-28 Reservados; no use.
29 Código de contexto. El valor es 1 si la tecla ALT se mantiene presionada mientras se presiona la tecla; de lo contrario, el valor es 0.
30 Estado de clave anterior. El valor es 1 si la tecla está presionada antes de que se envíe el mensaje, o es 0 si la tecla no está presionada.
31 Estado de transición. El valor es 1 si se está liberando la tecla, o 0 si se está presionando la tecla.

Para obtener más información, consulte Marcas de mensaje de pulsación de teclas.

Valor devuelto

Una aplicación debe devolver cero si procesa este mensaje.

Ejemplo

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;
}

Ejemplo tomado del directorio Windows Classic Samples de GitHub.

Comentarios

El mensaje de WM_CHAR usa unidades de código UTF-16 (formato de transformación Unicode de 16 bits) en su wParam si se usó la versión Unicode de la función RegisterClass para registrar la clase de ventana. De lo contrario, el sistema proporciona caracteres en la página de códigos del proceso actual, que se puede establecer en UTF-8 en Windows Versión 1903 (actualización de mayo de 2019) y versiones posteriores. Para obtener más información, vea Registrar clases de ventana y Usar páginas de códigos UTF-8 en aplicaciones de Windows.

A partir de Windows Vista, WM_CHAR mensaje puede enviar pares suplentes UTF-16 a ventanas Unicode. Use las macros IS_HIGH_SURROGATE, IS_LOW_SURROGATE y IS_SURROGATE_PAIR para detectar estos casos, si es necesario.

No hay necesariamente una correspondencia uno a uno entre las teclas presionadas y los mensajes de caracteres generados, por lo que la información de la palabra de orden alto del parámetro lParam generalmente no es útil para las aplicaciones. La información de la palabra de orden superior solo se aplica al mensaje de WM_KEYDOWN más reciente que precede a la publicación del mensaje de WM_CHAR .

Para teclados mejorados de 101 y 102 teclas, las teclas extendidas son alt derecha y las teclas CTRL derechas en la sección principal del teclado; las teclas INS, DEL, HOME, END, PAGE UP, PAGE DOWN y arrow en los clústeres a la izquierda del teclado numérico; y la división (/) y las teclas ENTRAR en el teclado numérico. Algunos otros teclados pueden admitir el bit de tecla extendida en el parámetro lParam .

El WM_UNICHAR mensaje es el mismo que WM_CHAR, salvo que usa UTF-32. Está diseñado para enviar o publicar caracteres Unicode en ventanas ANSI y puede controlar caracteres de plano complementario Unicode.

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Winuser.h (incluye Windows.h)

Consulte también