cs_gregory6
Messages postés22Date d'inscriptionjeudi 14 octobre 2004StatutMembreDernière intervention 3 janvier 2005
-
21 déc. 2004 à 08:42
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 2009
-
24 déc. 2004 à 18:16
Bonjour
je débute en visual c++ sous MFC, je dessine une page graphique avec un fond et du texte. Pour éviter le scintillement à chaque chgt de page, j'utilise un back buffer et bitblt. J'appelle InvalidateRect pour redessiner la page. Néanmoins, mon fond est noir lorsque j'affiche mes autres pages.
Voili le code en espérant que ça pourra vous aider.
J'aimerai que le fond soit dessiner sur toutes les pages sans le redessiner ds toutes mes fonctions.
//affiche ma page graphique
void CProjecttestDlg::Afficher1()
{
CPaintDC dc(this);
GetClientRect(rect);
cs_gregory6
Messages postés22Date d'inscriptionjeudi 14 octobre 2004StatutMembreDernière intervention 3 janvier 2005 22 déc. 2004 à 11:35
en fait, je défini une page graphique, un rectangle ds laquelle je dessine un fond, une ligne du texte. Je ne me sers pas des boites de dialogues ou active x , je crée tout moi meme.
Sans le back buffer, c ok mais j'aimerai éviter les clignotements lorsque je change de page. En gros, si je ne redessine pas le fond ds ma fonction afficher, il me colle le texte avec un fond noir.
Je pensais que la fonction InvalidateRect(NULL, FALSE) permettait de redessiner sur la page sans modifier le fond. Mais encore faut il ou savoir dessiner le fond ?
J'espère que j'ai été clair et merci pour ton aide. J'ai du mal avec les contextes de périphériques si t'aurai des liens intéresants dessus ou des sources.
pour information, je crois que (NULL,FALSE) vei dire : NULL pour redessinner toute la fenetre, et FALSE c'est pour dire si il faut appeller la procedure pour redessinner, moi je mets toujours (NULL,TRUE).
cs_gregory6
Messages postés22Date d'inscriptionjeudi 14 octobre 2004StatutMembreDernière intervention 3 janvier 2005 23 déc. 2004 à 20:40
En etudiant ta source, J'ai bien compris pour le back buffer mais cela ne resoud pas mon problème pour le fond de page. J'aimerai dessiner un fond ds un buffer mémoire (couleur , ligne, ...) ce fond serait invariant. Ensuite,ds un autre buffer je ne redessinerai que les éléments que je souhaite en les collants par dessus ma page mais je n'y arrive pas.
Je dessine le fond de ma page ds le onPaint mais il ya un probléme.
cs_gregory6
Messages postés22Date d'inscriptionjeudi 14 octobre 2004StatutMembreDernière intervention 3 janvier 2005 24 déc. 2004 à 13:35
je vois pas trop ce que tu veux dire, tu veux que j'utilise bitblt ds ma fonction afficher ? Si tu peux préciser, merci.
En revanche, j'ai fais des recherches et pour éviter de redessiner le fond, j'ai vu sur des sources qu'il fallait utiliser la fonction invalidateRect(NULL, FALSE) mais ça ne marche pas, ds une autre source j'ai vu qu'il fallait intercepter WM_ERASEBKGND et retouner TRUE ensuite je dessine le fond ds ma fonction OnPaint mais sans succès, ces méthodes te disent qqch ?
cs_gregory6
Messages postés22Date d'inscriptionjeudi 14 octobre 2004StatutMembreDernière intervention 3 janvier 2005 24 déc. 2004 à 15:25
J'aimerai avoir un fond vert, des lignes (moveto, lineto) et peut etre un rectangle avec le titre de l'appli. J'aimerai éviter de redessiner ça à chaque page. Voilà mais le fond de la page on le définit ou ? Je sais pas trop comment faire ?
Je suis preneur de la moindre idée.
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 24 déc. 2004 à 18:16
utilise WM_ERASE... (http://www.cppfrance.com/code.aspx?id=25498) le probleme c'est que tu fais des MFC, et moi je connais pas; mais si tu fais du Win32API, il n'y a aucun probleme, tu dessine tes lignes vertes dans ce message.