MTProd > Dev4all > Articles > APIs > DirectX > Votre premier jeu Windows - C++/DirectX > 3 WindowProc()
Rechercher12 Personnes en-ligne
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:.





<<  2  Les fichiers et répertoiresSommaire4  InitApp()  >>

 Accés rapide

1  Introduction
2  Les fichiers et répertoires
3  WindowProc()

Listing

Explications détaillées

4  InitApp()
5  WinMain()
6  UpdateFrame()
7  fonctions.h
8  input.h
9  Conclusion
Voir le sommaire complet

 Liens utiles

  • Publier un article
  • Envoyer cette page
  • Ecrire à l'auteur

  •  Mini-Chat

    Thienou (00h11): salut
    Thienou (00h13): Oula mon inscription date de 11 ans je me sent vieux :)
    neowolf25 (17h59): MMF2 en "pay what you want" jusqu'à demain sur
    neowolf25 (17h59): https://www.hu
    mblebundle.com/
    weekly

    Miuka (21h15): Coin coin de 2014
    Miuka (21h15): Des gens qui ont migré sur le forum Clickteam ou ailleurs ?
    Strike (09h45): Salut les vieux !
    Hikarion (12h46): Salut les djeunz
    Hikarion (13h38): A qui profite le scandale ?
    Hikarion (13h44): le chat irc est toujours actif ?

    Votre message



     Archives

     Dev4all Newsletter

    Restez à jour avec la newsletter mensuelle !

    Votre e-mail


    1800 abonnés

     Recommander Dev4all

    Recommandez Dev4all à un ami. Cela fera grandir notre communauté !

    E-mails de vos amis




    [ Accueil | S'inscrire | Mon Dev4all | Communauté | Téléchargements | Articles | Forums | Chat ]

    [ A propos de Dev4all | Aide | La charte Dev4all | Contact ]

    © 2000-2018 MTProd. Tous droits réservés.
    L'utilisation de Dev4all implique l'acceptation et le respect de la charte Dev4all.