Form außerhalb des Screens drucken

Newb

Erfahrenes Mitglied
Hallo,

das Problem ist das Folgende:
Ich möchte ein Windows-Forms-Fenster, was im Inhalt über den Bildschirmrand hinausgeht, drucken.

Hier ist das Problem, dass vom Fenster nur der sichtbare Bereich erfasst wird. D.h. alles was außerhalb des Bildschirmrandes liegt, wird nicht mit im "Screenshot" erfasst und bleibt leer.

So gehe ich dabei vor:
- Screenshot vom zu druckenden Form erstellen
- Screenshot drucken

Das Drucken läuft problemlos, das Erfassen des Bildes aber nicht.

Folgenden Code verwende ich um den Inhalt vom Form zu erfassen:
Code:
Graphics g1 = this.CreateGraphics();
Image MyImage = new Bitmap(this.Controls[0].Width, this.Controls[0].Height, g1);
Graphics g2 = Graphics.FromImage(MyImage);
IntPtr dc1 = g1.GetHdc();
IntPtr dc2 = g2.GetHdc();
BitBlt(dc2, 0, 0, this.Controls[0].Width, this.Controls[0].Height, dc1, 0, 0, 13369376);
* Das BitBlt ist eine Methode auf der gdi32.dll

Dann lasse ich mir das Bild speichern, also über
Code:
MyImage.Save(....)
dann sehe ich, das alles was unterhalb des maximal darzustellenden Bereiches liegt, schwarz ist.


Warum oder eher WIE kann ich den Bereich außerhalb des Bildschirms mit erfassen?
Das BitBlt vom


Gruß,
Newb
 

Newb

Erfahrenes Mitglied
Ah danke. Genau das hab ich gesucht.

In praktisch 70 % der in Frage kommenden Foren und Seiten findet man nur was vom Screenshots machen oder irgendwelche 100zeilen Code die die einzelnen Controls nachzeichnen mit dicke der Umrandungen etc.. Das DrawToBitmap macht im Grunde ja nix anderes, aber ist im Gegensatz zu den anderen "Lösungen" die eleganteste.

Vielen dank nochmal.
 

Danielku15

Erfahrenes Mitglied
Ich möchte bei Gelegenheit das Thema nochmal aufwühlen. Ich verwende die DrawToBitmap Methode um eine Scrollvorschau eines UserControls zu generieren. Seltsamerweise wird bei dem Methodenaufruf der nicht sichtbare Bereich (im Scrollbereich) als schwarze Fläche gezeichnet.

Konnte das Problem bereits jemand lösen?