Les messages caractères

 

Pour gérer la file d'attente des messages, vous trouverez souvent du code qui ressemble à ceci:

while (GetMessage (&msg, NULL, 0, 0))
{

TranslateMessage (&msg);
DispatchMessage (&msg);

}

Ce code, vous le trouvez souvent dans WinMain:

GetMessage() remplit la structure msg,
DispatchMessage() appelant la procédure de la fenêtre appropriée à ce message.

Reste la fonction TranslateMessage():

Cette fonction va s'occuper de traduire les messages d'évènements de touche en message de caractères qui seront ensuite relu par GetMessage() après le traitement du message d'évènement.

Il y a 4 messages qui peuvent être générés:

  Caractères Caractères préfixes
Caractères hors-système WM_CHAR WM_DEADCHAR
Caractères système WM_SYSCHAR WM_SYSDEADCHAR

 

Les caractères préfixes étant les caractères qui ne sont pas immédiatement afichables, ils auront besoin d'un autre caractère pour former la lettre correspondante.

Ex. ^ + e vont donner ê

Les messages WM_CHAR et WM_DEADCHAR sont dérivés de WM_KEYDOWN.
Les messages WM_SYSCHAR et WM_SYSDEADCHAR sont dérivés de WM_SYSKEYDOWN.

Dans WM_CHAR, wParam correspond au code ASCII de la lettre à afficher, lParam étant identique à un message d'évènement.

Suivant ce que vous venez de voir, l'appuie sur la touche A provoquera les messages suivants:
WM_KEYDOWN avec la touche virtuelle A
WM_CHAR avec le code ASCII A
WM_KEYUP avec la touche virtuelle A

De même il faudra éventuellemnt WM_KEYDOWN avec la touche virtuelle shift et WM_KEYUP
suivant l'ordre d'appuie sur les différentes touches...

Les touches de contrôle ont pour codes ASCII des valeurs comprises entre 01H et 1AH.
Il est possible de les produire en appuyant sur ctlr+A (01h) à ctrl+Z (1Ah)

Généralement, vous pourrez ignorer les caractères préfixes, puisque Windows fait le travail pour vous.