Du treibst mit dem GetDC() dein Windows ganschön in den Speichermangel. Zu jedem GetDC muss auch ein ReleaseDC vorhanden sein!
BitBlt() arbeitet nicht mit Bitmap-Handles, sondern nur mit Geräte Kontexten (DC). Du musst einen Compatiblen DC erzeugen:
var
dc: HDC;
memDC: HDC;
oldBmp: HBITMAP;
begin
dc := GetDC(hWnd);
try