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