Flicker Free mit Dialog - Warum gibt es kein OnEraseBkgnd ?



  • Ich möchte ein Beispiel mit memdc.h implementieren um auszutesten das das ganze damit wirklich flackerfrei ist.

    Allerdings kann ich bei einem dialog keine Funktion OnEraseBkgnd hinzufügen.

    Wie löse ich das dann ? Und warum kann ich OnEraseBkgnd nicht hinzufügen ?

    Matthias



  • Den Quellcode von meinem Beispielprogramm zum Flackerfreien darstellen habe ich unter folgendem Link Online gestellt.

    http://www.pospiech.eu/download/flickerfreedemo.zip

    Wie man beim ausführen zweifelsfrei sieht, flackert es wie wild. Ich würde gerne wissen warum, da ich nicht sehe was ich nicht beachtet haben sollte.

    Der Quellcode enthält dabei unter anderem den folgenden Code, wobei das OnEraseBkgnd manuell hinzugefügt wurde - was aber leider nicht ausgeführt wird.

    BOOL CFlickerFreeDemoDlg::OnEraseBkgnd(CDC* pDC)
    {
    	return FALSE;
    }
    
    void CFlickerFreeDemoDlg::OnPaint()
    {	
    	CPaintDC dc(this);
    	CMemDC pDC(&dc);
    
    	CRect rect;
    	GetClientRect(&rect);
    
    	int delta_x = rect.right - rect.left;
    	int delta_y = rect.bottom - rect.top;
    
    	PixelArray.IterateNewContent();
    
    	COLORREF color;
    	for (int x=0; x< delta_x; x++) 
    	{
    		for (int y=0; y< delta_y; y++) 
    		{
    			color = PixelArray.m_Array[x][y];
    			pDC->SetPixel(x,y,color);
    		}
    	}
    
    	CDialog::OnPaint();
    }
    

    wenn ich in dc statt in pDC zeichne, dann flackert es sogar weniger...

    Bin für jede Anregung dankbar,
    Matthias

    Matthias



  • Also ich kann bei mir auf WM_ERASEBKGND reagieren 😕 Fehlt bei Dir vieleicht die Message map?



  • Hab mir dein Program mal angeschaut es fehlt tatsächlich in der MessageMap (..dlg.cpp) der Eintrag ON_WM_ERASEBKGND().



  • connan schrieb:

    Also ich kann bei mir auf WM_ERASEBKGND reagieren 😕 Fehlt bei Dir vieleicht die Message map?

    Ich konnte es über VS nicht hinzufügen, weil VS es schlicht in der Liste der Messages zum Hinzufügen nicht anbietet.

    connan schrieb:

    Hab mir dein Program mal angeschaut es fehlt tatsächlich in der MessageMap (..dlg.cpp) der Eintrag ON_WM_ERASEBKGND().

    Mit ON_WM_ERASEBKGND() scheint es zu funktionieren!

    Matthias


Anmelden zum Antworten