winuser.h


TranslateAccelerator

La función TranslateAccelerator procesa las teclas aceleradoras para obtener comandos de menú. La función traduce un mensaje WM_KEYDOWN o WM_SYSKEYDOWN a un mensaje WM_COMMAND o WM_SYSCOMMAND (si existe una entrada para la tecla en la tabla de aceleradores especificada) y después envía un mensaje WM_COMMAND o WM_SYSCOMMAND directamente al procedimiento de ventana adecuado. TranslateAccelerator no vuelve hasta que el procedimiento de ventana haya procesado el mensaje.

Sintaxis

int TranslateAccelerator(
    HWND hWnd,         // manipulador de ventana de destino
    HACCEL hAccTable,  // manipulador de tabla de aceleradores
    LPMSG lpMsg        // dirección de estructura con el mensaje
   );

Parámetros

hWnd: identifica la ventana cuyos mensajes serán traducidos.

hAccTable: identifica una tabla de aceleradores. La tabla de aceleradores debe haber sido cargada por una llamada a la función LoadAccelerators o creada por una llamada a la función CreateAcceleratorTable.

lpMsg: apunta a una estructura MSG que contiene la información del mensaje recuperada de la cola de mensajes del proceso usando las funciones GetMessage o PeekMessage.

Valor de retorno

Si la función tiene éxito, el valor de retorno es TRUE.

Si la función falla, el valor de retorno es FALSE. Para obtener información adicional sobre el error, llamar a GetLastError.

Observaciones

Para diferenciar los mensajes que envía esta función de los mensajes enviados por menús o controles, la palabra de mayor peso del parámetro wParam del mensaje WM_COMMAND o WM_SYSCOMMAND contiene el valor 1.

Las combinaciones de teclas aceleradoras que se usan para seleccionar ítems del menú de ventana se traducen a mensajes WM_SYSCOMMAND; el resto de las combinaciones de teclas aceleradoras se traducen a mensajes WM_COMMAND.

Cuando TranslateAccelerator devuelve un valor no nulo y el mensaje se traduce, la aplicación no debe usar la función TranslateMessage para procesar el mensaje de nuevo.

Un acelerador no tiene por qué corresponder con un comando de menú.

Si el comando acelerador corresponde con un ítem de menú, la aplicación envía los mensajes WM_INITMENU y WM_INITMENUPOPUP, como si el usuario hubiese intentado mostrar el menú. Sin embargo estos mensajes no se envían si se cumplen las siguientes condiciones:

  • La ventana está deshabilitada.
  • El ítem de menú está deshabilitado.
  • La combinación de teclas aceleradoras no corresponde a un ítem del menú de ventana y la ventana está minimizada.
  • Está activa una captura de ratón. Para información sobre la captura de ratón, ver la función SetCapture.

Si la ventana especificada es la ventana activa y ninguna ventana tiene el foco del teclado (que es lo que ocurre en cuando la ventana está minimizada), TranslateAccelerator traduce los mensajes WM_SYSKEYUP y WM_SYSKEYDOWN en lugar de los mensajes WM_KEYUP y WM_KEYDOWN.

Cuando se produce una pulsación de un acelerador correspondiente a un ítem de menú cuando la ventana a la que pertenece ese menú está minimizada, TranslateAccelerator no envía un mensaje WM_COMMAND. Sin embargo, si la pulsación que se produce no coincide con ningún ítem del menú de la ventana o en el menú de ventana, la función envía un mensaje WM_COMMAND, aún cuando la ventana esté minimizada.