[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern long BitBlt(IntPtr hdcDest, int xDest, int yDest, int width, int height, IntPtr hdcSrc, int xSrc, int ySrc, int dwRop);
/// <summary>
/// Erzeugen von einem Image Objekt von dem übergebenen Control
/// </summary>
/// <param name="ctrl">Das Control von dem ein Bild erzeugt werden soll</param>
/// <returns>Ein Image Object mit dem Bild des Controls</returns>
public Image CaptureCtrl(Control ctrl) {
Graphics g = this.CreateGraphics();
// Ein neues Image mit der grösse des jeweiligen Controls anlegen
Image newImage = new Bitmap(ctrl.Size.Width, ctrl.Size.Height, g);
Graphics memoryGraphics = Graphics.FromImage(newImage);
//Handle holen
IntPtr src = g.GetHdc();
IntPtr dest = memoryGraphics.GetHdc();
// das Handle des Ziels
// die X Position an der das Bild eingefügt werden soll
// die Y Position an der das Bild eingefügt werden soll
// die breite des Bildes
// die höhe des Bildes
// das Handle der Quelle
// die X Position an der das Control liegt
// die Y Position an der das Control liegt
// Raster Operation Code an dieser Stelle ist es SRCCOPY
// Natürlich muß der auf der Seite angegebene Hex wert noch in ein int umgerechnet werden
// mehr informationen auf http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceui40/html/_celrfternaryrasteroperations.asp
BitBlt(dest, 0, 0, ctrl.ClientRectangle.Width, ctrl.ClientRectangle.Height, src, ctrl.Location.X, ctrl.Location.Y, 13369376);
// Handles wieder Freigeben
g.ReleaseHdc(dest);
memoryGraphics.ReleaseHdc(src);
return newImage;
}