Wie, um flimmern zu vermeiden, während der Handhabung WM_ERASEBKGND im Windows-dialog

Ich habe einen dialog, der passt. Es hat auch eine benutzerdefinierte hintergrund, was ich Male, in Reaktion auf eine WM_ERASEBKGND Anruf (derzeit ein einfacher Aufruf FillSolidRect).

Wenn das Dialogfeld in der Größe geändert wird, gibt es enorme flackern Los. Zu versuchen und reduzieren Sie das flackern erkläre ich alle child-windows und fügen Sie Sie, um die clipping-region. Das scheint mir ein wenig helfen-das ist jetzt das flackern ist meist offensichtlich, in alle untergeordneten Steuerelemente Sie repaint.

Wie kann ich den dialog, flicker-free, während die Größe? Ich vermute, double-buffering, müssen eine Rolle spielen, aber ich bin mir nicht sicher, wie Sie dies tun, wird ein Dialogfeld mit untergeordneten Steuerelementen (ohne, dass alle untergeordneten Steuerelemente owner-draw-oder so ähnlich).

Sollte ich beachten, dass ich mit C++ (nicht .NET), MFC, wenn auch Reine Win32-basierten Lösungen sind willkommen 🙂

HINWEIS: Eine Sache, die ich versucht, aber das hat nicht funktioniert (nicht sicher, warum) war:

CDC memDC;
memDC.CreateCompatibleDC(pDC);
memDC.FillSolidRect(rect, backgroundColor);

pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);

InformationsquelleAutor DougN | 2008-10-02

Schreibe einen Kommentar