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

 我来答
云南新华电脑学校
2018-08-02 · 百度认证:云南新华电脑职业培训学校官方账号
云南新华电脑学校
云南新华电脑学校是经云南省教育厅批准成立的省(部)级重点计算机专业学校,采用三元化管理模式,教学设备先进,师资雄厚学生毕业即就业,学院引进了电商企业入驻,创建心为电商创业园区,实现在校即创业
向TA提问
展开全部

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

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式