MFC Problème d'affichage (OnPaint() et ON_WM_PAINT())

MFC Problème d'affichage (OnPaint() et ON_WM_PAINT()) - C++ - Programmation

Marsh Posté le 20-03-2005 à 18:50:11    

Bonjour,
 
J'ai fait une petie applicatino qui dessine des graphiques à la Matlab.
Bref, tous s'affiche bien. Le problème (très connu car tout le monde l'as eu au début) c'est que dès que je passe une autre fenetre dessus, que je maximise .... mon graphe disparait.
 
J'ai été vor sur googole, et j'ai vu qu'il fallait choper le message ON_WM_PAINT() et redéfinir la fonction OnPaint().
 
Mais Si je fais celà (donc dans la fonction OnPaint je lui dis de redessiner mon graphe, ben cette fonction est appelertout le temps (j'ai mis un breakpoint pour voir et j'arrete pas defaire F5 (pour que le programme continue de tourner), mais je retourneimmédiatement sur ce breakpoint, bref maintenant le graphe s'affiche quoi qu'il se passe, mais le problème c'est que el grapheest redessiner enpermanence, meme quand je ne fait rien. Résultat : ben j'ai une sorrte de clignotement etc'est encorepire quece que j'avais. Avant j'appuyait sur un bouton (que j'i codé) et hop j'avais le graphique.
 
Donc ma question est simple comment lui dir de redessiner que lorsque c'est utile ???
 
P.S. Je suis débutant en MFC mais je pense quecette questio, tout le monde y a été confronté

Reply

Marsh Posté le 20-03-2005 à 18:50:11   

Reply

Marsh Posté le 20-03-2005 à 19:30:53    

Pour le breakpoint dans OnPaint c'est normal que tu n'arrêtes pas de passer dans le breakpoint :
l'appli se lance => OnPaint => breakpoint => passage de VS en premier plan
F5 => l'appli passe en premier plan => OnPaint => breakpoint => passage de VS en premier plan
F5 => ...
 
sans breakpoint tu ne devrais pas avoir ce problème.
 
Pour le clignotement : http://www.codeproject.com/gdi/flickerfree.asp

Reply

Marsh Posté le 20-03-2005 à 23:15:20    

Okay, merci pour le truc du F5 et breakpoint :D c'est l'histoire du chat qui se mord la queue.
 
Par contre j'ai absolument rien compris au CMemDC (enfin ej pens avoir rien compis car rien ne s'affiche).
 
En revanche je me suis inspiré de l'exemple donné par ton lien :
 
En fait tout est dans la fonction OnEraseBkgnd, du coup je ne recode pas la fonction OnDraw. Voici ma fonction :
 
BOOL My_Main_Window::OnEraseBkgnd(CDC* pDC)  
{
 Dessine(affiche_graphique) ;
 return FALSE;
}
 
En sachant que ma fonction Dessine prend un booléan qui s'il est faut rend ma fenetre blanche et si vrai, ben dessine ce que je veux.
 
Cette technique, si je maximise la fenetre, si je passe un autre fenetre dessus ...
 
Je suis content :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed