Brauche Hilfe beim Double Buffering



  • Hallo Leute! Ich krieg das mit dem Double Buffering nicht auf die Reihe. Ich probier hier schon die ganze Zeit rum. So zum Beispiel wird nichts auf meinem Fenster angezeigt.

    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hwnd, &ps);
    HDC hdcMem = CreateCompatibleDC(hdc);
    TextOut(hdcMem, 0, 0, "Text", 4);
    BitBlt(hdc, 0, 0, 100, 100, hdcMem, 0, 0, SRCCOPY);
    DeleteDC(hdcMem);
    EndPaint(hwnd, &ps);
    

    Mach ich das TextOut aber direkt auf hdc klappt alles. Vielleicht liegt es an den Parameter 100, 100 die ich bei BitBlt angegeben hab, aber ich weiss nicht wie man das berechnen muss. Allerdings hab ich da schon viele verschiedene Werte ausprobiert. Bestimmt ist es doch was anderes. 😞

    Frohe Weihnachten. 🙂



  • Du musst noch vorher in das MemDC ein Bitmap reinselektieren.
    Erstellen über z.B. CreateCompatibleBitmap.



  • Danke!! Muss ich das wirklich auch machen, wenn ich nur Ausgaben über TextOut machen will? 😕 😞



  • Ja. Und nicht vergessen das alte Bitmap wieder zu selektieren! (Rückgabewert vom SelectObject wieder am ende mit SelectObject selektieren.)



  • Ok vielen vielen Dank. Habs jetzt hinbekommen. Aber ich habe noch ein Problem. Normalerweise ist mein Fensterhintergrund weiss. Jetzt aber wo ich das Bitmap dareinselektiere ist diese 100 mal 100 Fläche aber schwarz geworden. Also ist in meinem weissen Fenster ein schwarzer Kasten mit dem Text drin. Das will ich natürlich nicht. Weiss jemand wie ich ein weisses Bitmap darein selektiere? Oder wie macht man das normalerweise? 😕

    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hwnd, &ps);
    HDC hdcMem = CreateCompatibleDC(hdc);
    HBITMAP hdcBmp = CreateCompatibleBitmap(hdc, 100, 100);
    HBITMAP hbmOld = SelectObject(hdcMem, hdcBmp);
    
    TextOut(hdcMem, 0, 0, "Text", 4);
    
    BitBlt(hdc, 0, 0, 100, 100, hdcMem, 0, 0, SRCCOPY);
    SelectObject(hdcMem, hbmOld);
    DeleteObject(hdcBmp);
    DeleteDC(hdcMem);
    EndPaint(hwnd, &ps);
    

    Ich habe es sogar geschafft alle Resourcen wieder freizugeben. :p 🙂



  • Du kannst einfach ein Rectangle reinzeichnen! (Vielleicht vorher noch den weißen Brush reinselektieren - bekommst du mit GetStockObject(WHITE_BRUSH))




Log in to reply