Tutorial d'initiation A la programmation avec l'API Windows
Tutorial d'initiation a la programmation Windows avec Microsoft Visual C++
Chapitre 3Les fenêtres8. Interactions avec l'utilisateur
Cours théorique :
Une fenêtre, peut recevoir des données de la part de l'utilisateur de deux manières : par le clavier, ou par la souris. Cependant, la fenêtre ne recevra d'information du système que si elle est active. Si la fenêtre n'est pas active elle ne sera informée ni des événements clavier, ni des événements souris. La fenêtre sera informée de différents événements : pression d'une touche, relâchement d'une touche, mouvement de la souris, pression d'un bouton de la souris… Une fenêtre est informée dès que la souris bouge au dessus de sa zone client (si elle est active). Le nombre de messages envoyés lorsque la souris se déplace est assez important. Aussi, le traitement de ces messages (WM_MOUSEMOV) doit être bref.
Les messages suivants sont utilisés pour traiter les événements provenant du clavier :
WM_KEYDOWN est envoyé lorsqu'une touche est enfoncée. Ce message indique le 'Virtual Key Code' correspondant à la touche.
WM_KEYUP est envoyé lorsqu'une touche est relevée. Ce message indique le 'Virtual Key Code' correspondant à la touche.
WM_CHAR indique le caractère ASCII correspondant à la touche pressée.
WM_SYSKEYUP, WM_SYSKEYDOWN, WM_SYSCHAR sont utilisés pour identifier les événements dus à des touches systèmes.
Remarquons tout de même la différence entre un code ASCII et un 'Virtual Key Code' : le code ASCII identifie un caractère (a,A,E,* ont des codes ASCII différents). Un 'Virtual Key Code' identifie une touche physique, a et A ont donc le même code, mais dans le 2e cas, SHIFT est aussi pressé (en ASCII SHIFT n'a pas de code, ce qui est normal car cette touche ne correspond pas à un caractère).
Les messages suivants sont utilisés pour traiter les événements provenant de la souris :
WM_MOUSEMOVE est envoyé à chaque déplacement de la souris (plusieurs dizaines de fois par seconde). Les coordonnées de la souris sont passées en paramètres lors de l'envoi de ce message. Si le message est reçu avec un retard, la position reçue sera celle enregistrée lorsque le message a été envoyé.
WM_LBUTTONDOWN est envoyé lorsque le bouton gauche de la souris est pressé.
WM_LBUTTONUP est envoyé lorsque le bouton gauche de la souris est relevé.
WM_MBUTTONDBLCLK est envoyé lors d'un double clic du bouton gauche de la souris. Ce message n'est envoyé que si le style CS_DBLCLKS est utilisé lors de la création du style de la fenêtre.
Les mêmes messages sont envoyés pour les boutons centraux et droits de la souris. (WM_MBUTTON_ ou WM_RBUTTON_).
Pour obtenir la position courante de la souris, une application peut utiliser la fonction GetCursorPos(). Cette position peut ensuite être convertie grâce aux fonctions ScreenToClient() et ClientToScreen(). Les fonctions GetKeyState() et GetKeyboardState() peuvent être utilisées pour connaître l'état d'une touche ou de l'ensemble du clavier.
|