方法一:WINDOWS API画法 
	
	
		- 
			//获取要绘制的控件句柄
 
- 
			Image img = GetWindow(this.tabPage12.Handle);
 
- 
			//在母容器上创建图形对象 
 
- 
			Graphics gOut = mOut.pnlOut.CreateGraphics();
 
- 
			//在指定位置按指定大小绘出image 
 
- 
			gOut.DrawImage((Image)img, form1.pnlImage.DisplayRectangle, this.tabPage12.DisplayRectangle, GraphicsUnit.Pixel);
 
- 
			//释放图形对象所有资源 
 
- 
			gOut.Dispose(); 
 
- 
			img.Dispose(); 
 
- 
			GC.Collect(); 
 
- 
			form1.pnlImage.BringToFront();
 
- 
			 
 
- 
			#region 截图函数
 
- 
			    [DllImport("gdi32.dll")] 
 
- 
			    public static extern IntPtr CreateDC( 
 
- 
			     string lpszDriver, // driver name驱动名 
 
- 
			     string lpszDevice, // device name设备名 
 
- 
			     string lpszOutput, // not used; should be NULL 
 
- 
			     IntPtr lpInitData // optional printer data 
 
- 
			     ); 
 
- 
			    [DllImport("gdi32.dll")] 
 
- 
			    public static extern int BitBlt( 
 
- 
			     IntPtr hdcDest, // handle to destination DC目标设备的句柄 
 
- 
			     int nXDest, // x-coord of destination upper-left corner目标对象的左上角的X坐标 
 
- 
			     int nYDest, // y-coord of destination upper-left corner目标对象的左上角的Y坐标 
 
- 
			     int nWidth, // width of destination rectangle目标对象的矩形宽度 
 
- 
			     int nHeight, // height of destination rectangle目标对象的矩形长度 
 
- 
			     IntPtr hdcSrc, // handle to source DC源设备的句柄 
 
- 
			     int nXSrc, // x-coordinate of source upper-left corner源对象的左上角的X坐标 
 
- 
			     int nYSrc, // y-coordinate of source upper-left corner源对象的左上角的Y坐标 
 
- 
			     UInt32 dwRop // raster operation code光栅的操作值 
 
- 
			     );
 
- 
			    [DllImport("gdi32.dll")] 
 
- 
			    public static extern IntPtr CreateCompatibleDC( 
 
- 
			     IntPtr hdc // handle to DC 
 
- 
			     );
 
- 
			    [DllImport("gdi32.dll")] 
 
- 
			    public static extern IntPtr CreateCompatibleBitmap( 
 
- 
			     IntPtr hdc, // handle to DC 
 
- 
			     int nWidth, // width of bitmap, in pixels 
 
- 
			     int nHeight // height of bitmap, in pixels 
 
- 
			     );
 
- 
			    [DllImport("gdi32.dll")] 
 
- 
			    public static extern IntPtr SelectObject( 
 
- 
			     IntPtr hdc, // handle to DC 
 
- 
			     IntPtr hgdiobj // handle to object 
 
- 
			     );
 
- 
			    [DllImport("gdi32.dll")] 
 
- 
			    public static extern int DeleteDC( 
 
- 
			     IntPtr hdc // handle to DC 
 
- 
			     );
 
- 
			    [DllImport("user32.dll")] 
 
- 
			    public static extern bool PrintWindow( 
 
- 
			     IntPtr hwnd, // Window to copy,Handle to the window that will be copied. 
 
- 
			     IntPtr hdcBlt, // HDC to print into,Handle to the device context. 
 
- 
			     UInt32 nFlags // Optional flags,Specifies the drawing options. It can be one of the following values. 
 
- 
			     );
 
- 
			    [DllImport("user32.dll")] 
 
- 
			    public static extern IntPtr GetWindowDC( 
 
- 
			     IntPtr hwnd 
 
- 
			     );
 
- 
			    public Bitmap GetWindow(IntPtr hWnd) 
 
- 
			    { 
 
- 
			        IntPtr hscrdc = GetWindowDC(hWnd); 
 
- 
			        Control control = Control.FromHandle(hWnd); 
 
- 
			        IntPtr hbitmap = CreateCompatibleBitmap(hscrdc, control.Width, control.Height); 
 
- 
			        IntPtr hmemdc = CreateCompatibleDC(hscrdc); 
 
- 
			        SelectObject(hmemdc, hbitmap); 
 
- 
			        PrintWindow(hWnd, hmemdc, 0); 
 
- 
			        Bitmap bmp = Bitmap.FromHbitmap(hbitmap); 
 
- 
			        DeleteDC(hscrdc);//删除用过的对象 
 
- 
			        DeleteDC(hmemdc);//删除用过的对象 
 
- 
			        return bmp; 
 
- 
			    } 
 
- 
			    #endregion 
		
 
	
	方法二、给background赋值 
	
	
		- 
			Bitmap bmp = new Bitmap(this.tabPage12.Width, this.tabPage12.Height);
 
- 
			//将控件区域显呈到指定位图 
 
- 
			this.tabPage12.DrawToBitmap(bmp, this.tabPage12.DisplayRectangle); 
 
- 
			form1.pnlImage.BackgroundImage = (Image)bmp;
 
- 
			/* 分屏显示座席 */ 
 
- 
			form1.pnlImage.BackColor = Color.White; 
 
- 
			form1.pnlImage.BringToFront(); 
		
 
	
	方法三、将某个屏幕位置拷贝到image 
	
	
		- 
			Image img = new Bitmap(tabPage13.Width, tabPage13.Height); 
 
- 
			Graphics g = Graphics.FromImage(img); 
 
- 
			g.CopyFromScreen(Obj.PointToScreen(Point.Empty), Point.Empty, tabPage13.Size); 
 
- 
			IntPtr dc1 = g.GetHdc(); 
 
- 
			g.ReleaseHdc(dc1); 
 
- 
			form1.pnlImage.BackgroundImage = img;
 
- 
			form1.pnlImage.BringToFront(); 
		
 
	
给窗体中控件绘图的几种方法
原文:http://blog.chinaunix.net/uid-25498312-id-4601214.html