Fonction TranslateAcceleratorW (winuser.h)

Traite les touches d’accélérateur pour les commandes de menu. La fonction traduit un message WM_KEYDOWN ou WM_SYSKEYDOWN en message WM_COMMAND ou WM_SYSCOMMAND (s’il existe une entrée pour la clé dans la table d’accélérateur spécifiée), puis envoie le message WM_COMMAND ou WM_SYSCOMMAND directement à la procédure de fenêtre spécifiée. TranslateAccelerator ne retourne pas tant que la procédure de fenêtre n’a pas traité le message.

Syntaxe

int TranslateAcceleratorW(
  [in] HWND   hWnd,
  [in] HACCEL hAccTable,
  [in] LPMSG  lpMsg
);

Paramètres

[in] hWnd

Type : HWND

Handle de la fenêtre dont les messages doivent être traduits.

[in] hAccTable

Type : HACCEL

Poignée de la table d’accélérateur. La table d’accélérateur doit avoir été chargée par un appel à la fonction LoadAccelerators ou créée par un appel à la fonction CreateAcceleratorTable .

[in] lpMsg

Type : LPMSG

Pointeur vers une structure MSG qui contient les informations de message récupérées à partir de la file d’attente de messages du thread appelant à l’aide de la fonction GetMessage ou PeekMessage .

Valeur retournée

Type : int

Si la fonction réussit, la valeur de retour est différente de zéro.

Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError.

Remarques

Pour différencier le message que cette fonction envoie des messages envoyés par des menus ou des contrôles, le mot d’ordre élevé du paramètre wParam du WM_COMMAND ou WM_SYSCOMMAND message contient la valeur 1.

Les combinaisons de touches d’accélérateur utilisées pour sélectionner des éléments dans le menu de la fenêtre sont traduites en messages WM_SYSCOMMAND ; toutes les autres combinaisons de touches d’accélérateur sont traduites en messages WM_COMMAND .

Lorsque TranslateAccelerator retourne une valeur différente de zéro et que le message est traduit, l’application ne doit pas utiliser la fonction TranslateMessage pour traiter à nouveau le message.

Un accélérateur n’a pas besoin de correspondre à une commande de menu.

Si la commande accélérateur correspond à un élément de menu, l’application est envoyée WM_INITMENU et WM_INITMENUPOPUP messages, comme si l’utilisateur essayait d’afficher le menu. Toutefois, ces messages ne sont pas envoyés si l’une des conditions suivantes existe :

  • La fenêtre est désactivée.
  • La combinaison de touches d’accélérateur ne correspond pas à un élément du menu de la fenêtre et la fenêtre est réduite.
  • Une capture de souris est en vigueur. Pour plus d’informations sur la capture de souris, consultez la fonction SetCapture .
Si la fenêtre spécifiée est la fenêtre active et qu’aucune fenêtre n’a le focus clavier (ce qui est généralement le cas si la fenêtre est réduite), TranslateAccelerator traduit WM_SYSKEYUP et WM_SYSKEYDOWN messages au lieu de WM_KEYUP et WM_KEYDOWN messages.

Si une frappe d’accélérateur correspondant à un élément de menu se produit lorsque la fenêtre propriétaire du menu est réduite, TranslateAccelerator n’envoie pas de message WM_COMMAND . Toutefois, si une frappe d’accélérateur ne correspond à aucun des éléments du menu de la fenêtre ou du menu de la fenêtre , la fonction envoie un message WM_COMMAND , même si la fenêtre est réduite.

Exemples

Pour obtenir un exemple, consultez Création d’accélérateurs pour les attributs de police.

Notes

L’en-tête winuser.h définit TranslateAccelerator comme un alias qui sélectionne automatiquement la version ANSI ou Unicode de cette fonction en fonction de la définition de la constante de préprocesseur UNICODE. Le mélange de l’utilisation de l’alias neutre en encodage avec du code qui n’est pas neutre en encodage peut entraîner des incompatibilités qui entraînent des erreurs de compilation ou d’exécution. Pour plus d’informations, consultez Conventions pour les prototypes de fonction.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête winuser.h (inclure Windows.h)
Bibliothèque User32.lib
DLL User32.dll

Voir aussi