Offscreen blit statt Invalidate
-
Hallo,
ich habe eine komplexe view, die beim Scrollen oft nachgezeichnet werden muss. Dabei ensteht ein starkes flimmern.
Wie kann man dieses Problem umgehen?
Ich wollte diese Problem lösen, in dem ich versucht habe alles auf einen Offscreen dc zu laden, um beim neuzeichnen dann alles zu blitten, was aber leider nicht funktioniert hat.Also würde das flimmern mit einem Offscreen dc weggehen? wenn ja, wie blitte ich einen DC richtig auf einen anderen (bei mir wurden immer keine daten angezeigt?
Gruß Stu
-
Was du wohl meinst ist double-buffering. Google mal danach, da solltest du genug funktionierende Beispiele finden.
-
DCs blittet man üblicherweise mit BitBlt. Und du solltest deinen DC mit CreateCompatibleDC anlegen, und dann eine Bitmap dafür mit CreateCompatibleBitmap.
So z.B.HDC windowDc = GetDC(windowHandle); HDC memoryDc = CreateCompatibleDC(windowDc); HBITMAP memoryDcBitmap = CreateCompatibleBitmap(windowDc); HGDIOBJ oldBitmap = SelectObject(memoryDc, memoryDcBitmap); ReleaseDC(windowDc);Und freigeben tust du das halt wieder mit
VERIFY(SelectObject(memoryDc, oldBitmap) == HGDIOBJ(memoryDcBitmap)); VERIFY(DeleteObject(memoryDcBitmap)); VERIFY(DeleteDC(memoryDc));Quasi. Dann sollte es mit BitBlt schön gehen. Hatte nie Probleme.