方法一: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();