MTProd > Dev4all > Articles > APIs > DirectX > Votre premier jeu Windows - C++/DirectX > 5 WinMain()
Rechercher21 Personnes en-ligne
Votre premier jeu Windows - C++/DirectX

5  WinMain()

Une fonction obligatoire : cette fonction est appellé par Windows au lancement de notre application, vous allez voir, elle n'est pas bien compliqué !



5.1  Listing

Listing 5.1.1 : WinMain()
(
ouvrir dans une nouvelle fenêtre)

 1  int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
 2  {
 3      MSG            msg;
 4  
 5      if ( InitApp(hInstance, nCmdShow) != DD_OK )
 6          return FALSE;
 7  
 8      while ( TRUE )
 9      {
 10          if ( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) )
 11          {
 12              if ( !GetMessage(&msg, NULL, 0, 0) )
 13                  return msg.wParam;
 14              TranslateMessage(&msg);
 15              DispatchMessage(&msg);
 16          }
 17          else if ( bActive )
 18          {
 19              DoKeyboardAction();
 20              DoMouseAction();
 21              UpdateFrame();
 22          }
 23          else
 24          {
 25              // Make sure we go to sleep if we have nothing else to do
 26              WaitMessage();
 27          }
 28      }
 29  }






5.2  Explications détaillées

En ligne 1 nous déclarons notre fonction, il s'agit d'une fonction de type int PASCAL ou WINAPI.
Voici les arguments :

  • HINSTANCE hInstance : L'handle de l'instance courante. Un handle est une variable qui identifie un objet ; une référence indirecte à une ressource du système d'exploitation

  • HINSTANCE hPrevInstance : L'handle de la précédente instance

  • LPSTR lpCmdLine : Un pointeur vers la ligne de commande de notre application (afin de pouvoir lire, éventuellement les options passées à notre application)

  • INT nCmdShow : Le status de la fenêtre, spécifie comment notre fenêtre doit être vue


En ligne 3, nous déclarons une variable locale de type MSG nommé msg. MSG est un type prédéfini de Windows, il s'agit d'une structure contenant les valeurs nécessaires à un message Windows (comme ceux que nous gérons dans notre fonction WindowProc(), plus haut).

En ligne 5, nous appellons la fonction d'initialisation de notre application nommé InitApp() que nous avons détaillé plus haut. Si cette dernière ne retourne pas la valeur DD_OK nous retournons la valeur FALSE qui aura pour effet d'arreter notre application.

Ligne 8, nous démarrons la boucle infinie de notre application avec while ( TRUE ), elle ne s'arretera pas avant que nous retournions une valeur.

Ligne 10, nous testons si nous avons un message de Windows à lire, si oui, nous essayons de le prendre en ligne 12, si la capture échoue, nous retournons msg.wParam en ligne 13 et laissons Windows décider de que faire de ce message.
Si l'on a pû obtenir le message nous le traduisons en une chaine de caractères avec la fonction TranslateMessage() en ligne 14 puis nous le "dispatchons" (ligne 15) en une procédure Windows, si cette procédure est gérée par notre fonction WindowProc() (voir plus haut) elle effectura l'action définit, sinon elle laissera Windows décider.

Si nous arrivons en ligne 17, cela signifie que nous n'avons pas de message à lire, nous testons alors si notre application est active (le focus de la fenêtre est activé) grace à la valeur de bActive que nous définissons dans la fonction WindowProc().
Si elle est bien active nous appellons la fonctions DoKeyboardAction() (ligne 19) et DoMouseAction() (ligne 20), enfin UpdateFrame(). Nous parlerons de ces trois fonctions plus loin.
Si l'application n'est pas active (ligne 23), nous attendons un message avec WaitMessage() (ligne 26) tel que WM_SETFOCUS, WM_DESTROY, etc. destiné à notre application, une fois reçu nous recommençons alors la boucle.





<<  4  InitApp()Sommaire6  UpdateFrame()  >>

 Accés rapide

1  Introduction
2  Les fichiers et répertoires
3  WindowProc()
4  InitApp()
5  WinMain()

Listing

Explications détaillées

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.