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