Jusqu'à maintenant, nous avons fait pas mal de trucs, tous toujours
plus beaux les uns que les autres, mais nous n'avons jamais pu vraiment contrôler
les objets. Ce que nous faisions de mieux c'était tourner autour plus
ou moins vite et puis c'est tout. En plus la vitesse de rotation dépendait
de la vitesse d'affichage, et vu que c'était prévu pour tourner
de façon fluide en software, on distinguait plus grand chose avec une
GeForce... Nous allons donc apprendre comment gérer les interactions
utilisateurs : souris, clavier, et pourquoi pas tablette graphique. Il n'y aura
pas de code OpenGL spécifique dans ce tutorial, mais vous pourrez l'utiliser
pour modifier les exemples des tuts précédents. | |
Le principal message concernant le clavier est WM_CHAR .
Le caractère est contenu dans wParam (à convertir en TCHAR ).
Ce message n'est pas généré directement, mais c'est une
traduction du message WM_KEYDOWN .
Ce dernier gère tous les messages provenant du clavier, même les
touches étendues. Si la touche est une touche ASCII normale, alors TranslateMessage()
génèrera un message WM_CHAR
à partir du WM_KEYDOWN , pour
que le message soit plus simple à gérer. Si vous n'appelez pas
TranslateMessage(Msg) pour chaque
message, vous devrez gérer tous les messages provenant du clavier à
travers le message WM_KEYDOWN . Pour
ce message, wParam contient le code
de la touche virtuelle enfoncée. Voici la liste des touches virtuelles
possibles :
VK_LBUTTON (bouton gauche de la souris)
VK_RBUTTON (bouton droit de la souris)
VK_MBUTTON (bouton milieu de la souris)
VK_CANCEL
VK_BACK
VK_TAB
VK_CLEAR
VK_RETURN
VK_SHIFT
VK_CONTROL
VK_MENU (Alt)
VK_PAUSE
VK_CAPITAL (Caps Lock)
VK_ESCAPE
VK_SPACE
VK_PRIOR (Page Up)
VK_NEXT (Page Down)
VK_END
VK_HOME
VK_LEFT
VK_UP
VK_RIGHT
VK_DOWN
VK_SELECT (???)
VK_EXECUTE (???)
VK_SNAPSHOT (Print Screen)
VK_INSERT
VK_DELETE
VK_HELP
VK_0, ... , VK_9
VK_A , ... , VK_Z
VK_LWIN (touche 'Windows' gauche - pour les claviers windows)
VK_RWIN (touche 'Windows' droite - pour les claviers windows)
VK_APPS (touche 'Apps' - pour les claviers windows)
VK_NUMPAD0, ... , VK_NUMPAD9
VK_MULTIPLY (*)
VK_ADD (+)
VK_SUBTRACT (-)
VK_DECIMAL (.)
VK_DIVIDE (/)
VK_F1, ... , VK_F24
VK_NUMLOCK
VK_SCROLL (Scroll Lock)
VK_ATTN (???)
VK_CRSEL (???)
VK_EXSEL (???)
VK_EREOF (???)
VK_PLAY (???)
VK_ZOOM (???)
VK_NONAME (???)
VK_PA1 (???)
VK_OEM_CLEAR (???)
Les touches sans parenthèses se passent de commentaires, celles commentées
par (???) ne sont pas spécifiques aux claviers standards PC.
Vous aurez aussi remarqué que les clics de souris peuvent aussi être
gérés grâce aux touches virtuelles : le message WM_KEYDOWN
n'est donc pas un simple message clavier, mais gère aussi pas mal de
touches spéciales. | |
Là par contre y'a pas mal de messages. Voici la liste des messages utiles
:
WM_LBUTTONDBLCLK, WM_LBUTTONDOWN, WM_LBUTTONUP,
WM_MBUTTONDBLCLK, WM_MBUTTONDOWN, WM_MBUTTONUP, WM_RBUTTONDBLCLK, WM_RBUTTONDOWN,
WM_RBUTTONUP, WM_MOUSEMOVE : Ces messages se comprennent d'eux-mêmes.
Les valeurs de wParam et lParam
sont les mêmes pour tous : wParam contient
les autres touches appuyés en même temps : MK_CONTROL ,
MK_SHIFT ... et MK_LBUTTON ,
MK_MBUTTON , MK_RBUTTON .
LOWORD( lParam)
et HIWORD( lParam)
renvoient quand à eux les coordonnées x et y du curseur.
WM_MOUSEWHEEL : C'est à
peu près la même chose que pour WM_MOUSEMOVE ,
sauf que là les touches parallèles sont stockées dans
LOWORD( wParam) ,
et HIWORD( wParam)
contient la valeur de la rotation de la molette.
Il y en a quelques autres, mais ils ne sont pas suffisamment utiles pour être
présentés ici, et de toute façon vous avez la liste de
tous les messages dans l'aide de VC++.
Ben voilà c'est déjà terminé. Pas de source à
télécharger aujourd'hui, puisqu'on a rien vu de particulier niveau
OpenGL.
Antoche | |