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 :
Cette fonction doit r�-afficher la fen�tre � chaque tour de boucle.
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); } }
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?
Partager