Double-Buffering (was: BackBuffer)



  • Hi, ich möchte eine Animation mit GDI machen. Damit das Bild aber nicht "flackert" muß man irgednwie erst mal die ganze Grafik in einen Backbuffer malen und dann den BackBuffer in den Vordergrund holen. Weiß jemand wie das mit GDI geht?

    cu crass

    edit: Topic mit Suchwörtern verfeinert.



  • So:

    HDC hDC = ...; // z.B. mit BeginPaint
    HDC hDC2 = CreateCompatibleDC(hDC);
    HBITMAP hBM = CreateCompatibleBitmap(hDC, cxClient, cyClient);
    SelectObject(hDC2, hBM);
    
    // Zeichenoperationen auf hDC2...
    
    BitBlt(hDC, 0, 0, cxClient, cyClient, hDC2, 0, 0, SRCCOPY);
    // Ein SelectObject(OldBitmap); ist imho nicht nötig
    DeleteObject(hBM);
    DeleteDC(hDC2);
    

    Edit: Parameter von BitBlt berichtigt. 🙂

    [ Dieser Beitrag wurde am 16.09.2002 um 18:12 Uhr von cd9000 editiert. ]

    edit: Vertipper berichtigt.



  • thanx, funktioniert! 🙂



  • Hallo,
    ich habe deinen Code auch mal umgesetzt, bin aber auf eine Stelle gestoßen die ich nicht lösen konnte.

    Zeichnet man jedes "Objekt" erst auf die hDC2 und zeigt es dann an ist alles wunderbar.
    Nehmen wir aber an, dass man einen Teil direkt auf hDC und einen anderen Teil auf hDC2 zeichnet, so wird der alte hDC Inhalt übermalt.

    Meine Frage also:

    Wie bzw. kann man ein Hbitmap transparent machen ???

    danke
    Mischu



  • Dann müsstest du wohl anstelle von BitBlt TransparentBlt verwenden - aber den Sinn davon verstehe ich nicht so ganz 🙄



  • Nehmen wir aber an, dass man einen Teil direkt auf hDC und einen anderen Teil auf hDC2 zeichnet, so wird der alte hDC Inhalt übermalt.

    Das ergibt keinen Sinn, warum sollte man das tun wollen ? - Dadurch zerstörst du dir ja wieder den Backbuffer-Vorteil...



  • Montag, 16.09.2002

    Dienstag, 02.03.2004

    omg 😮



  • Ich hatte hier darauf verlinkt - aber eigentlich hätte er ruhig dort weiterposten können...


Anmelden zum Antworten