IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

[Messages Windows] WM_QUIT jamais reçu?


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut [Messages Windows] WM_QUIT jamais reçu?
    Bonsoir!

    Alors voilà, je fais un jeu, et ma boucle principale ressemble à cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    void    GameLoop()
    {
        mExit = false;
        ...
        MSG msg;
        while (!mExit)
        {
            ...
            while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
            {
                if (msg.message == WM_QUIT)
                {
                    mExit = true;
    	        break;
                }
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            ...
        }
        ...
    }
    Les '...' représentent les init, update, rendu.

    Le problème:
    Lorsque je quitte mon jeu par un 'Alt + F4', ou en fermant via la croix en mode fenêtré, j'ai bien la fenêtre qui est détruite, dans mais le gestionnaire de taches je vois toujours mon jeu lancé

    Tout se passe comme si le message WM_QUIT n'est jamais reçu (et donc envoyé lors de la fermeture de la fenètre).

    Pour info, ça se passe sous WindowsXP SP2, et le moteur de rendu est Ogre3D.

  2. #2
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    est ce qu'il ya une activité bloquante après la boucle de traitement de messages ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par shifty.net
    Tout se passe comme si le message WM_QUIT n'est jamais reçu (et donc envoyé lors de la fermeture de la fenètre).
    WM_QUIT est-il reçu ou pas ?

    Normalement c'est facile à voir, d'après le code posté.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    On peut voir d'où tu l'envoies, le WM_QUIT ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    - Il n'y a pas d'activité bloquante après la boucle de traitement des messages
    - WM_QUIT n'est jamais reçu
    - Je n'envoi pas moi même le message WM_QUIT, je compte sur Alt+F4

    En fait on a trouvé, cela vient de Ogre qui doit récuperer le message avant.
    Maintenant ça marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    void    GameLoop()
    {
        mExit = false;
        ...
        MSG msg;
        while (!mExit)
        {
            ...
            if (mRenderWindow->isClosed())
                mExit = true;
            while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            ...
        }
        ...
    }

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    Le système n'envoie pas WM_QUIT (Pas normalement, en tout cas). C'est à toi de l'envoyer.
    Généralement, on l'envoie lorsque la fenêtre des détruite, via un appel à PostQuitMessage() dans le case WM_DESTROY.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Intercepter un Message Windows ? Créer un Composant Grille !
    Par TOTO32 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 21/07/2004, 14h41
  2. Réponses: 2
    Dernier message: 06/04/2004, 09h39
  3. Interception Messages Windows
    Par tiramisu dans le forum MFC
    Réponses: 5
    Dernier message: 24/02/2004, 15h01
  4. Réponses: 13
    Dernier message: 14/01/2004, 17h35
  5. Gestion des message windows dans les threads
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 06/10/2003, 18h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo