Bonjour, j'ai un petit probl�me avec la librairie GDI...

Dans une fonction CStartingGDIPlusDlg::OnOk(), j'ai une boucle dans laquelle la fonction suivante est appel�e :

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 CStartingGDIPlusDlg::DrawWorld(const _World& World) {
	using namespace Gdiplus;
	CPaintDC dc(this);
	Graphics graphics(dc.m_hDC);
	SolidBrush Bred (Color::Red);
	SolidBrush Bgreen (Color::Green);
	SolidBrush BLightSkyBlue (Color::LightSkyBlue);
	graphics.Clear(Color::Black);
	SendMessage(WM_PAINT, (WPARAM) dc.GetSafeHdc(), 0);       //Pour "forcer" le graphic.Clear immédiatement
	const int Res = 2;
	for (list<_Point>::const_iterator i = World.Obstacle.begin() ; i != World.Obstacle.end() ; i++) {
		graphics.FillRectangle(&Bred,i->first*Res,i->second*Res,Res,Res);
	}
	_Point Pt = World.FourmisColony.begin()->Fourmis.begin()->GetCible();
	graphics.FillRectangle(&Bgreen,Pt.first*Res,Pt.second*Res,Res,Res);
	for (vector<_Fourmis>::const_iterator i = World.FourmisColony.begin()->Fourmis.begin() ; i != World.FourmisColony.begin()->Fourmis.end() ; i++ ) {
		graphics.FillRectangle(&BLightSkyBlue,i->GetCurCoord().first*Res,i->GetCurCoord().second*Res,Res,Res);
	}
}
Cette fonction doit r�-afficher la fen�tre � chaque tour de boucle.

Au premier appel, tout se passe bien.

Au second appel (et pour tous les autres), tout se passe comme si mes appels graphiques �taient ignor�s, je vois en mode debug que les divers instructions sont execut�es, mais malgr� les appels graphics.Clear et les graphics.FillRectanlge, la fen�tre reste telle qu'elle �tait apr�s le 1er appel. Pire, si je passe par-dessus ma fen�tre avec une autre, mon application fini par se fige et se "coince" (?) dans du code compil� sans source disponible...

J'ai essay� avec ou sans la ligne SendMessage(WM_PAINT, (WPARAM) dc.GetSafeHdc(), 0);
J'ai essay� d'appeler graphics.Flush...

Quelle est la bonne m�thode pour que cette fonction marche � chaque appel?