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 :
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 // 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); }
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
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); }
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.
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; }
Voilà, quelq'un a une idée ? Ai-je mal fait quelque-chose ?
Merci d'avance.
JP.
Partager