Warning: Declaration of MainMenu::Show($MaxLevel) should be compatible with MenuItem::Show($Level = 0) in /var/www/html/evasion/people/Antoine.Bouthors/common.php on line 156

Warning: Declaration of MainMenu::FindMe($Path, $Level) should be compatible with MenuItem::FindMe($Path) in /var/www/html/evasion/people/Antoine.Bouthors/common.php on line 167
OpenGL : l'input avec Windows
 

OpenGL : l'input avec Windows

Introduction

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.

 

1. G�n�ralit�s

Bon, vous aurez compris que les interactions se g�rent comme le reste : gr�ce aux messages envoy�s � la WinProc. Donc tout ce que nous allons faire c'est lister les messages qui nous int�ressent.

 

2. Le clavier

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.

 

3. La souris

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
 


← L'input avec GLUT↑ Tutoriaux OpenGL ↑