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