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.