[wxWidget] Flickering pendant wxPaintDC

Flickering pendant wxPaintDC [wxWidget] - C++ - Programmation

Marsh Posté le 05-12-2008 à 17:10:34    

Bonjour tout le monde.
Je bricole une petit appli devant afficher des animations à l'écran.
Pour cela je me sers de wxwidget...
 
J'ai donc mon petit wxbitmap tout chaud tout neuf que je souhaite afficher dans ma fenêtre. Voici comment je fesse avec la methode OnPaint :  

Code :
  1. void CameraFrame::OnPaint( wxPaintEvent& evt )
  2. {
  3. wxPaintDC dc(this);
  4. if (m_bitmap.Ok())
  5.  dc.DrawBitmap(m_bitmap, 0, 0);
  6. }


 
Difficile de faire plus simple :D
Bref ca marche... Mais (car il y toujours un "mais" ).. Ca clignote sévère....
J'ai cherché un moyen de lui dire de ne paaaaaasss effacer l'écran à chaque "onpaint" (histoire d'afficher le nouveau bitmap par dessus le précédent) mais rien trouvé :/
 
S'il y a des experts wxwidget dans le coin, j'accepterai volontiers un coup de main.
 
Merki :)

Reply

Marsh Posté le 05-12-2008 à 17:10:34   

Reply

Marsh Posté le 05-12-2008 à 17:19:40    

Je ne connais pas wxWidget, mais dans les applications Windows en C, les lignes suivantes permettent d'éviter un source importante de clignotement qui est le réaffichage du fond juste avant l'affichage du Paint.

     case WM_ERASEBKGND:
         return(1); // Prevent erasing the background to reduce flickering
         break;

Peut-être qu'il existerait un OnEraseBkGnd?

Reply

Marsh Posté le 05-12-2008 à 17:40:40    

Ca marrrccheeee.
Merci olivthill (à tes souhaits).
 
Donc, j'ai ajouté un event EVT_ERASE_BACKGROUND et crée une méthode OnEraseBackGround qui ne fait rien...
 

Code :
  1. BEGIN_EVENT_TABLE(CameraFrame, wxFrame)
  2. EVT_PAINT(OnPaint)
  3. EVT_ERASE_BACKGROUND(CameraFrame::OnEraseBackGround)
  4. END_EVENT_TABLE()
  5. void CameraFrame::OnEraseBackGround(wxEraseEvent& event)
  6. {
  7. // Turlututu...
  8. }

Reply

Sujets relatifs:

Leave a Replay

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