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

MFC Discussion :

Problème SetTimer


Sujet :

MFC

  1. #1
    Membre averti
    Inscrit en
    Février 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 35
    Par défaut Problème SetTimer
    Bonjour à tous,

    Je vais vous exposer mon problème en essayant d'être le plus clair possible. Je développe une application dialog based comportant des cadres OpenGL. Je cherche à faire une animation à l'intérieur de ceux-ci, et l'utilisation d'un timer me semble appropriée. Voilà comment j'ai fait :

    Le timer est déclaré dans la classe (héritée de CWnd) qui représente le cadre OpenGL, et je dispose de deux fonctions pour démarrer ou arrêter le timer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Mise en route du timer (donc de l'animation)
    void CGlView::StartTimer(UINT freq)
    {
    ntimer = SetTimer(1, 50, NULL);
    }
    // Arret du timer (et donc de l'animation)
    void CGlView::StopTimer(void)
    {
    KillTimer(ntimer);
    }
    
    Les messages du timer sont interceptés dans cette même classe :

    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
    void CGlHumerusView::OnTimer(UINT nIDEvent)
    {
    switch (nIDEvent)
    {
    case 1:
    {
    // Clear color and depth buffer bits
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    // Draw OpenGL scene
    //humerus->rotat+=1.0f;
    Affiche();
    break;
    }
    default:
    break;
    }
    CGlView::OnTimer(nIDEvent);
    }
    
    Je dispose aussi dans cette classe d'un flag qui indique si l'animation est en route ou pas. La mise en route du timer se fait dans ma boîte de dialogue, par l'intermédiaire d'un bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void CHumerusDialog::OnBnClickedBtnAnim()
    {
    if (!(GLWin->anim))
    GLWin->StartTimer(50);
    else
    GLWin->StopTimer();
     
    GLWin->anim=!GLWin->anim;
    }
    
    Même si je débute en timer, tout me semble correct, mais à l'exécution, quand je clique sur le bouton, ça bugge (j'ai un beau message "Debug Assertion Failed"). Quand j'exécute le débuggeur, je constate que c'est dans la fonction SetTimer que ça merde.

    Voilà, quelq'un a une idée ? Ai-je mal fait quelque-chose ?

    Merci d'avance.

    JP.

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    euihb c quoi qu'il marque comme erreur exactement !

    sinon ntimer dans ta methode StartTimer, il sert à quoi ?

  3. #3
    Membre averti
    Inscrit en
    Février 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 35
    Par défaut
    Voilà en gros ce qui est marqué dans la boîte de dialogue d'erreur :

    Assertion debug failed !

    Program : [mon_programme].exe
    File : f:\vs70builds\3077\vc\MFCATL\ship\atlmfc\include\afxwin2.inl
    Line : 182


    Mais je viens de remarquer un truc bizarre : il parle d'un fichier sur f:, mais ce disque n'existe pas ...

    Sinon, ntimer, c'est l'identifiant de mon timer. C'est pas comme ça qu'on fait ?

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Par défaut
    j'avais delirer j'avais vu killtimer(1);

    euh bah la je ne vois pas dsl :s

  5. #5
    Membre averti
    Inscrit en
    Février 2005
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 35
    Par défaut
    Bon, j'ai résolu le problème en ne gérant le timer que dans ma boîte de dialogue, et non dans le cadre OpenGL. Ca n'explique cependant toujours pas pourquoi ça ne marchait pas avant, mais tant pis.

    Bon, ça saccade un peu quand on bouge la souris, mais globalement, ça va.

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

Discussions similaires

  1. Problème Script SetTime
    Par PoOoOoZ dans le forum VBScript
    Réponses: 0
    Dernier message: 06/02/2010, 21h06
  2. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  3. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  5. Réponses: 6
    Dernier message: 25/03/2002, 21h11

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