Hintergrund bringt flackern



  • Hi leute,

    im schulischen zusammenhang programmieren wir tic tac toe.
    habe mich jetzt mal bezüglich des double bufferings informiert. daraufhin habe ich folgende 2 methoden mit dem assistenten erstellt:

    BOOL CTTTView::OnEraseBkgnd(CDC* pDC) 
    {
    	// TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen
    
    	CRect CClientRect;
    	GetClientRect(&CClientRect);
    
    	pDC->FillRect(&CClientRect, &m_hintergrund); //fuellt das rechteck aus
    
    	return true;
    }
    
    void CTTTView::OnInitialUpdate() 
    {
    	CView::OnInitialUpdate();
    
    	// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    	m_hintergrund.CreateSolidBrush(RGB(70,55,251));	//pinsel erstellen und farbe für hintergrund festlegen
    
    }
    

    Brauche natürlich noch ein Hintergrund.
    Sonst sieht es nicht schön aus. Nur bringt der Hintergrund wieder alles zum flackern. Warum?
    ich habe doch nur einen hintergrund gesetzt.
    auch wenn ich den in ::ondraw erstelle...

    woran liegt das?
    OnEraseBkgnd soll ja gegen das flackern helfen.

    sebastian


  • Mod

    NeinOnErsseBkGnd hilft nicht gegen das Flackern. Der kurze Moment in dem der Hintergrund gezeichnet wird bis der Vordergrund wieder da ist lang um bei User ein Flackergefühl auszulösen, wnen die Refreshs häufiger sind.
    Thema Doublebuffering.
    Suche mal nach CMemDC bei www.codeproject.com

    Dort ist alles erklärt.



  • ja, du meinst
    http://www.codeproject.com/KB/GDI/flickerfree.aspx

    genau das wollte ich eigentlich verhindern.
    viel code ist das 😕



  • habe mein invalidate() nun überall mit dem paramter FALSE aufgerufen.
    klappt auch, aber ohne hintergrund.

    wie kann ich jetzt nen hintergrund erstellen ohne das es flackert?

    void CMeineKlasse::OnDraw(CDC* pDC)
    {   
         CBrush* myBrush = new CBrush(RGB(204,228,253));
         CRect clientRect;
         GetClientRect(&clientRect);
         pDC->FillRect(clientRect, myBrush);
    }
    

  • Mod

    Du liest nicht!
    In OnEraseBkgnd nichts machen und TRUE zurück. Invalidate solltest Du nicht mit FALSE aufrufen.



  • Martin Richter schrieb:

    Du liest nicht!
    In OnEraseBkgnd nichts machen und TRUE zurück. Invalidate solltest Du nicht mit FALSE aufrufen.

    dann steht aber immer noch aus wie ich das mit dem hintergrund mache.
    denn der fehlt mir ja noch.


  • Mod

    Lies doch den Artikel. Du löscht den Hintergrund mit in der OnPaint Routine...


Anmelden zum Antworten