一、程序介绍:
在有MDI窗体的工具条和菜单栏,并且窗体在任何大小时,要想准确获得窗体中控件的坐标,可以使用下列代码:
这段代码的大体含义是在原来的窗体上的pbImg(pictureBox)位置进行屏幕截图后写回pbImg,而屏幕任何内容的位置不能变化,让人看不出是截图后重新写入的。
Bitmap CatchBmp = new Bitmap(pbImg.Width, pbImg.Height);
Graphics g = Graphics.FromImage(CatchBmp);
var screenPoint = PointToScreen(pbImg.Location);
//
//x1 = panel1.Width+panel1.Left;
//y1 = menuStrip1.Height+menuStrip1.Location.Y ;
g.CopyFromScreen(new Point(screenPoint.X + panel1.Width + panel1.Left, screenPoint.Y + menuStrip1.Height + menuStrip1.Location.Y), new Point(0, 0), new Size(pbImg.Width, pbImg.Height));
二、程序中用到的典型方法介绍
1、Control.PointToScreen 方法
将指定工作区点的位置计算成屏幕坐标。
命名空间: System.Windows.Forms
程序集: System.Windows.Forms(在 system.windows.forms.dll 中)
C#语法:
public Point PointToScreen ( Point p)
参数
p:要转换的工作区坐标 Point。
返回值:一个 Point,它表示转换后的 Point、p(以屏幕坐标表示)。
2、Graphics.CopyFromScreen 方法 (Int32, Int32, Int32, Int32, Size)
执行颜色数据(对应于由像素组成的矩形)从屏幕到 Graphics 的绘图图面的位块传输。
命名空间: System.Drawing
程序集: System.Drawing(位于 System.Drawing.dll)
C#语法:
public void CopyFromScreen( int sourceX, int sourceY, int destinationX, int destinationY, Size blockRegionSize)
参数
sourceX
Type: System.Int32
位于源矩形左上角的点的 x 坐标。
sourceY
Type: System.Int32:位于源矩形左上角的点的 y 坐标。
destinationX
Type: System.Int32:位于目标矩形左上角的点的 x 坐标。
destinationY
Type: System.Int32:位于目标矩形左上角的点的 y 坐标。
blockRegionSize
Type: System.Drawing.Size:要传输的区域大小。
异常:
Win32Exception:操作失败。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。