Einzelnen Beitrag anzeigen

Popov
(Gast)

n/a Beiträge
 
#8

AW: Screenshot - Verständnisfrage

  Alt 27. Feb 2012, 17:48
So langsam ergibt es einen Sinn.

Delphi-Quellcode:
procedure ScreenshotBook(bmp: THandle);stdcall;
var ScreenDC, CompDC: HDC;
    ScreenBitmap: HBitmap;
    h: THandle;
begin
  ScreenDC := GetDC(0); //DC des gesamten Bildschirm abfragen
  CompDC := CreateCompatibleDC(ScreenDC); //einen neuen DC anlegen, der gleich dem DC vom Bildschirm ist??
  ScreenBitmap := CreateCompatibleBitmap(ScreenDC,
                  GetDeviceCaps(ScreenDC,HORZRES),
                  GetDeviceCaps(ScreenDC,VERTRES)); //hä? ein Bitmap wird angelegt ... und dann?
  h := SelectObject(CompDC,ScreenBitmap); //das versteh ich auch nicht so genau...
  BitBlt(CompDC,0,0,GetDeviceCaps(ScreenDC,HORZRES),
         GetDeviceCaps(ScreenDC,VERTRES),ScreenDC,0,0,SRCCOPY); //klar, hier wird der Inhalt aus ScreenDC in CompDC kopiert
  BitBlt(bmp,0,0,300,300,compDC,0,0,SRCCOPY); //Inhalt von CompDC in ein mitgeliefertes Handle

  DeleteObject(SelectObject(CompDC,h)); //?? und vor allem: warum selectObject in deleteObject??
  DeleteDC(CompDC); //künstlich erzeugtes DC freigeben
  ReleaseDC(0,ScreenDC); //Freigeben des abgefragten Bildschrim-DCs
end;
Ok, GetDC ermittelt das Handle für einen Gerätekontext, CreateCompatibleDC erzeugt einen kompatiblem Gerätekontext, CreateCompatibleBitmap erzeugt eine Bitmap die für SelectObject Voraussetzung ist. BitBlt kopiert dann alles an die richtige Stelle. Zuletzt wird aufgeräumt.

Ob das alles nötig ist, weiß ich nicht, es ist aber, soweit ich es beurteilen kann, ist es so wie es sein soll.
  Mit Zitat antworten Zitat