Votre premier jeu Windows - C++/DirectX
 |
3 WindowProc()
Une fonction obligatoire : elle gère les processus de Windows (messages) lorsque l'application tourne, c'est en fait la procédure de notre fenêtre principalle :
3.1 Listing
Listing 3.1.1 : WindowProc() (ouvrir dans une nouvelle fenêtre)
 |  |  | 1 | | long FAR PASCAL WindowProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) | 2 | | { | 3 | | switch (message) | 4 | | { | 5 | | case WM_ACTIVATE: | 6 | | // Pause si minimisé | 7 | | bActive = !((BOOL)HIWORD(wParam)); | 8 | | SetAcquire(); | 9 | | return 0L; | 10 | | | 11 | | case WM_DESTROY: | 12 | | // Nettoie et ferme l'application | 13 | | ReleaseAllObjects(); | 14 | | FreeDirectInput(); | 15 | | PostQuitMessage(0); | 16 | | return 0L; | 17 | | | 18 | | case WM_SETCURSOR: | 19 | | SetCursor(NULL); | 20 | | return TRUE; | 21 | | } | 22 | | | 23 | | return DefWindowProc(hWnd, message, wParam, lParam); | 24 | | } |
3.2 Explications détaillées
En ligne 1 nous déclarons notre fonction, il s'agit d'une fonction de type long FAR PASCAL, ne vous prenez pas la tête avec ce type , ce n'est pas important, sachez juste qu'il s'agit d'un type de nombre (32 bits) standard, nous aurions pû utiliser, sur la plateforme Windows, le type long WINAPI. Voici les arguments :
- HWND hWnd : La fenêtre qui reçoit les messages
- UINT message : Le message envoyé à la fenêtre
- WPARAM wParam : Message additionel
- LPARAM lParam : Message additionel
En ligne 3, nous "switchons" la valeur de message, en plus clair nous allons tester les valeurs du message, l'instruction switch est en fait une façon plus propre de faire des tests (if, else if, etc.). Nous gérons ici :
- WM_ACTIVATE en ligne 5 : que faisons-nous lorsque l'application est activée (la fenêtre vient de prendre le focus ou premier plan).
Nous fixons alors en ligne 7, la valeur de bActive (déclarée dans le fichier globals.h), puis nous appellons en ligne 8, la fonction SetAcquire() (input.h) Pour finir, nous retournons en ligne 9, la valeur 0L (0 de type long, norme ANSI)
- WM_DESTROY en ligne 11 : que faisons-nous lorsque l'utilisateur veut quitter l'application.
Nous appellons respectivement en ligne 13, 14 et 15 les fonctions ReleaseAllObjects() (fonctions.h), FreeDirectInput (input.h) et PostQuitMessage(0) qui, comme son nom l'indique, ordonne Windows à quitter l'application. Pour finir, nous retournons en ligne 16, la valeur 0L (0 de type long, norme ANSI)
- WM_SETCURSOR en ligne 18 : que faire lorsque Windows nous demande quel curseur afficher lorsque l'application est active ?
Nous nous limitons en ligne 19 à fixer le curseur à NULL grâce à la fonction SetCursor(), ce qui aura pour effet de cacher le curseur. Pour finir, nous retournons en ligne 20, la valeur TRUE (valeur "vrai" de type BOOL ou booléenne, "vrai" ou "faux" (un bit quoi ))
Enfin en ligne 23, nous appellons et retournons la fonctions DefWindowProc() qui s'occupera de gérer les actions par défaut pour tous les autres messages que nous n'avons pas utilisés dans notre fonction WindowProc(). Nous pourrions bien entendu gérer plus de messages dans notre fonction, il suffirait alors d'ajouter un ligne du style : case NOM_MESSAGE:.
|
|  |
 |