[wxWidget] Double buffering [Résolu]

Double buffering [Résolu] [wxWidget] - C++ - Programmation

Marsh Posté le 02-02-2005 à 15:13:44    

Bonjour !
 
Je viens demander votre aide encore une fois ! J'aimerai simplement savoir si on peut faire du double buffering avec wxWidget. J'ai l'impression qu'il n'existe pas une méthode ou classe de base pour le faire, comme en Java par exemple, donc je suppose qu'il faut finter.
 
Ce que j'ai fait :
 
dans mon OnPaint, je créé un MemoryDC avec une image dans lequel je fais tous mes paints (des DrawBitmap et DrawText en gros). Une fois terminé je fais un "blit" du memoryDC sur le DC normal.
 
Résultat => à chaque refresh ça scintille...  
 
Ca marche autrement ou il y a un truc à utiliser ?
 
Merci d'avance !
 
a+


Message édité par Nitro68 le 02-02-2005 à 19:50:34
Reply

Marsh Posté le 02-02-2005 à 15:13:44   

Reply

Marsh Posté le 02-02-2005 à 17:46:26    

En fait comme dis je sais même pas si le double buffering aurait un intérêt. Moi ce qu'il me faut, c'est que ça scintille plus.
 
Pour expliciter un peu mieux, j'affiche 42 gif dans ma fenetre, et en passant ma souris sur telle ou telle image, j'affiche un texte en bas à droite, ou je change l'image, j'affiche d'autres trucs, etc.
 
Bref, quand la souris bouge, j'ai souvent des refresh, et à ce moment ça scintille. Sans utiliser le blit, on voit les images scintiller une à une en quelques sortes. Avec le blit, ca fait un seul gros scintillement mais toujours visible.
 
Autre chose que j'ai remarqué, la gestion des processus de Windows me fait prendre environ 1 Mo de mémoire utilisée à chaque refresh, pourtant je réallou pas d'image, donc là je comprends pas;
 
Voilà le code de base du paint, sans faire de blit :
 

Code :
  1. wxPaintDC real_dc(this);// le DC
  2.   real_dc.DrawBitmap(*new wxBitmap(*new wxImage("img/map/map.gif" )), 0, 0, true);
  3. for (unsigned int i = 0; i < game->getTerritoires().size(); ++i)
  4. {
  5.            int x,y;
  6.            x =game->getTerritoires().at(i)->getImageX();
  7.            y =game->getTerritoires().at(i)->getImageY();
  8.          
  9.         // affichage de toutes les images
  10. real_dc.DrawBitmap(game->getTerritoires().at(i)->getImage(), x, y, true);
  11. }
  12.        //affichage d'un message en bas de la fenetre
  13.       real_dc.DrawText(mesg.c_str(),10,550);


 
PS : trouver des tutoriaux, docs et autres sur wxWidget c'est chaud :(


Message édité par Nitro68 le 02-02-2005 à 17:47:25
Reply

Marsh Posté le 02-02-2005 à 18:10:39    

heu je connais pas wxWidget mais

Code :
  1. real_dc.DrawBitmap(*new wxBitmap(*new wxImage("img/map/map.gif" )), 0, 0, true);

ça me parait douteux. (je n'ose pas imaginer que ce soit le fonctionnement normal du DC)
 
Sinon pour ton probleme de scintillement, à mon avis c'est plutot un probleme de background qui se repeint avant de te donner la main pour dessiner (WM_ERASEBKGND dans l'API win32).

Reply

Marsh Posté le 02-02-2005 à 18:51:26    

Ah oui lol j'avou que mon DrawBitmap est un peu programmé à l'arrache, mais bon ce qu'il veut c'est un bitmap, et pour ça faut une image :). Je mettrai ce bitmap en attribut membre de ma classe plutot. Je vais voir l'histoire du background.  
 
Merci pour la réponse ;)

Reply

Marsh Posté le 02-02-2005 à 19:51:07    

Merci ça marche l'histoire du erase background (enfin faut capter l'evenement et mettre une méthode vide).
 
Merci :)

Reply

Sujets relatifs:

Leave a Replay

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