Einzelnen Beitrag anzeigen

Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#1

Probleme mit CreateCompatibleDC und DeleteDC

  Alt 11. Okt 2004, 11:14
Hallo,

meine Frage bezieht sich auf Luckies Tutorial OffScreenBitmap realisieren ohne VCL, hat primär damit aber nichts zu tun.

Zum Überprüfen nutze ich immer MemProof (sollte bekannt sein). Jedenfalls kriege ich nach dem Beenden meines Programmes in der MemProof-Sandbox 25 mal den Fehler: 'DeleteDC(...): Falscher Parameter'.

Mal kurz zusammengefasst...
Mein WM_CREATE:
Delphi-Quellcode:
    WM_CREATE:
      begin
        [...]

        hDevCon := GetDC(hWnd);
        hDevConMem := CreateCompatibleDC(hDevCon);

        hBmp := CreateCompatibleBitmap(hDevCon, WND_WIDTH, WND_HEIGHT);
        hBmpOld := SelectObject(hDevConMem, hBmp);

        DeleteObject(hBmp);

        TextOut(hDevConMem, 10, 10, 'Hello World', 11);

        // Wäre wohl "richtig":
        // SelectObject(hDevConMem, hBmpOld);
        // DeleteDC(hDevConMem);

        ReleaseDC(hWnd, hDevCon);

        Result := 0;
      end;
Mein WM_DESTROY:
Delphi-Quellcode:
    WM_DESTROY:
      begin
        SelectObject(hDevConMem, hBmpOld);
        DeleteDC(hDevConMem);

        [...]
      end;
Problem ist jetzt, dass ich hDevConMem schon im WM_CREATE wieder löschen müsste (dann würde ich auch keine Fehler bekommen). Habe ich aber nichts von, da ich das DC im WM_PAINT nicht mehr auf das Fenster-DC kopieren könnte, was konkret heißt, mein "Hello World" wird nicht dargestellt.

Nun wollte ich fragen, ob es da eine andere Lösung gibt? D.h.: wo müsste ich mein "CreateCompatibleDC" und "DeleteDC" platzieren, dass ich
a.) im WM_PAINT darauf zugreifen kann
b.) es wieder freigeben kann, ohne dass ich Fehler von der gdi32.dll gekommen.

MfG Philipp
  Mit Zitat antworten Zitat