Das Offscreen-Surface auf das Primary-Surface ausgegeben.
Nun kann bereits das Offscreen-Surface auf das Primary-Surface und damit auf den Bildschirm ausgegeben werden.
Weil das Primary-Surface aber den gesamten Bildschirm repräsentiert, würde die Ausgabe alle eventuell überlagernden
Fenster gnadenlos übermalen, was sich für eine "ordentliche" Windows-Anwendung nicht ziemt. Daher wird ein sogenanntes
Clipper-Objekt benötigt, das die Ausgabe auf den vom Ausgabefenster belegten Bereich begrenzt. Das Clipper-Objekt wird
über einen Aufruf der CreateClipper-Methode des DirectDraw-Objektes erzeugt. Anschließend wird das Fenster,
dessen Position den Ausgabebereich für DirectDraw festlegt, durch einen Aufruf von SetHWnd festgelegt. Dazu wird
dieser Methode das Handle des Fensters übergeben, dessen gesamter Bereich von DirectDraw kontrolliert werden soll.
Weil darunter auch die Menüzeile und die Fensterüberschrift leiden, verwendet unser erstes Beispiel eine PictureBox
innerhalb der Form, in die alle Ausgaben erfolgen. Damit der Clipper (zu deutsch "Abschneider") auch aktiv wird, muss er
dem Primary-Surface (unserem "Bildschirm") durch Aufruf von SetClipper zugewiesen werden:
Dim Clipper As _
DirectDrawClipper
Set Clipper = dd. _
CreateClipper(0)
Clipper.SetHWnd Picture1.hWnd
primarySurface.SetClipper _
Clipper
Nun ist es endlich soweit, den Inhalt des Offscreen-Surfaces in das Primary-Surface und damit auf den
Bildschirm zu kopieren. Weil das Primary-Surface den gesamten Bildschirm repräsentiert, die Ausgabe
aber nur in dem vom Fenster bedeckten Bereich erfolgen soll, müssen zuerst die absoluten Bildschirmpositionen
des Ausgabefensters ermittelt werden. Das erfolgt durch einen Aufruf der API-Funktion GetWindowRect, die
praktischerweise bereits als Methode des DirectX7-Objektes bereitsteht. Die Position dieses Rechtecks wird
in der übergebenen RECT-Struktur abgelegt, deren Elemente Left, Top, Right und Bottom,
die Pixelposition der linken, oberen und rechten, unteren Ecke aufnehmen.
Dim rDst As RECT
Dim rSrc As RECT
Dim ddrval As Long
Call dx.GetWindowRect _
(Picture1.hWnd, rDst)