给窗体中控件绘图的几种方法

方法一: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 1 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();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值