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.