DeleteObject nach DeleteDC noch notwendig?



  • Huhu!
    Hab mal ne kleine Frage an die GDI experten unter euch...

    Angenommen ich habe folgendes gemacht:

    HDC hFontBitmapDC = CreateCompatibleDC(hdc);
    	HBITMAP hFontBitmap = LoadBitmap(hInstance, BitmapPath);
    	HBITMAP hOld = SelectBitmap(hFontBitmapDC, hFontBitmap);
    	DeleteObject(hOld);
    
    	...
    	//Blitten
    	BitBlt(hdc, xPos, yPos, iZeichenBreite, iZeichenHoehe, hFontBitmapDC, xKoord, yKoord, SRCCOPY);
    

    Nun muss ich ja nach dem Blitten aufräumen. Ich habe ja nun noch das Bitmap selbst (hFontBitmap) und den Gerätekontext auf dieses (hFontBitmapDC). Wird beim Aufruf von DeleteDC(hFontBitmapDC) das Bitmap ebenfalls gelöscht, oder muss ich das nachträglich noch per DeleteObject(hFontBitmap) erledigen?

    mfg Perner



  • Wie Windows das intern handhabt weiß kein Mensch, vermutlich bei M$ auch nicht.
    Logisch wäre, alle GDI-Objekte aus dem DC zu löschen bevor der den finalen
    Gnadenschuß erhält.

    So ähnlich wie malloc(), wech is wech. Sauber programmiert gibt man den frei .


  • Mod

    Nein! Diese Bitmap wird nicht entsorgt!

    Dein Code ist falsch.
    Lösche nicht die alte Bitmap, die Du einselektierst. Merke sie Dir einfach und selektiere sie zurück bevor Du den DC entsorgst.

    HDC hFontBitmapDC = CreateCompatibleDC(hdc);
        HBITMAP hFontBitmap = LoadBitmap(hInstance, BitmapPath);
        HBITMAP hOld = SelectObject(hFontBitmapDC, hFontBitmap);
        ...
        //Blitten
        BitBlt(hdc, xPos, yPos, iZeichenBreite, iZeichenHoehe, hFontBitmapDC, xKoord, yKoord, SRCCOPY); 
    
        // Aufräumen
        SelectObject(hFontBitmapDC, hOld);
        DeleteDC(hFontBitmapDC);
    

Anmelden zum Antworten