获取MDI窗体中控件坐标的方法/屏幕局部截图原位写入

简介:

一、程序介绍:
在有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:操作失败。




     本文转自fengyp 51CTO博客,原文链接:http://blog.51cto.com/fengyp/2046947,如需转载请自行联系原作者



相关文章
|
API C# Windows
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
Winform中实现无边框窗体只需要设置FormBorderStyle = FormBorderStyle.None,但是无边框下我们需要保留移动窗体、拖拽调整大小、自定义美观好看的标题栏等...
2630 0
Winform控件优化之无边框窗体及其拖动、调整大小和实现最大最小化关闭功能的自定义标题栏效果
|
算法 Windows
Winform控件优化之实现无锯齿的圆角窗体(或任意图形的无锯齿丝滑的窗体或控件)【借助LayeredWindow】
在一般能搜到的所有实现圆角窗体的示例中,都有着惨不忍睹的锯齿...而借助于Layered Windows,是可以实现丝滑无锯齿效果的Form窗体的,其具体原理就是分层窗体....
983 0
Winform控件优化之实现无锯齿的圆角窗体(或任意图形的无锯齿丝滑的窗体或控件)【借助LayeredWindow】
|
3月前
MFC隐藏对话框边框和可拖动
MFC隐藏对话框边框和可拖动
|
9月前
|
C#
WPF控件和窗体一起放大一起缩小
WPF控件和窗体一起放大一起缩小
182 0
C#创建无边框可拖动窗口
C#创建无边框可拖动窗口
171 0
C#编程学习19:mdi窗体中子窗体不能重复打开的三种实现方式
C#编程学习19:mdi窗体中子窗体不能重复打开的三种实现方式
C#编程学习19:mdi窗体中子窗体不能重复打开的三种实现方式
QT软件开发: 点击鼠标在窗口里绘制矩形(窗口透明背景)
QT软件开发: 点击鼠标在窗口里绘制矩形(窗口透明背景)
466 0
QT软件开发: 点击鼠标在窗口里绘制矩形(窗口透明背景)
|
C#
WPF 获取鼠标屏幕位置、窗口位置、控件位置
原文:WPF 获取鼠标屏幕位置、窗口位置、控件位置 public struct POINT { public int X; public int Y; ...
1819 0
|
C# 图形学
在WPF里面实现以鼠标位置为中心缩放移动图片
原文:在WPF里面实现以鼠标位置为中心缩放移动图片 在以前的文章使用WPF Resource以及Transform等技术实现鼠标控制图片缩放和移动的效果里面,介绍了如何在WPF里面移动和放大缩小图片,程序也支持使用滚轮的方式缩放图片。
1597 0
|
C#
WPF 获得鼠标相对于屏幕的位置,相对于控件的位置
原文:WPF 获得鼠标相对于屏幕的位置,相对于控件的位置 相对于屏幕的位置   第一步:     ///     /// 用于获得鼠标相对于屏幕的位置    ///     public class Win32    {        [StructLayout(LayoutKind.
1124 0