文档章节

C# winform实现截屏,附代码

深圳大道
 深圳大道
发布于 2016/12/29 15:36
字数 419
阅读 6
收藏 0
namespace Message
{
    partial class Form3
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog();
            this.SuspendLayout();
            // 
            // Form3
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(353, 347);
            this.Cursor = System.Windows.Forms.Cursors.Cross;
            this.Name = "Form3";
            this.Text = "Form3";
            this.Load += new System.EventHandler(this.Form3_Load);
            this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.Form3_MouseUp);
            this.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.Form3_DoubleClick);
            this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.Form3_MouseDown);
            this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Form3_MouseMove);
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.SaveFileDialog saveFileDialog1;
    }
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace Message
{
    public partial class Form3 : Form
    {
        private bool down = false;
        private Point firstPoint;
        private Pen p = new Pen(Color.Red);
        private Graphics gra;
        private Rectangle rectangle;//存储用户截取的矩形
        private FormChat f4;
        public Form3(FormChat f4)
        {
            InitializeComponent();
            this.f4 = f4;
        }

        private void Form3_Load(object sender, EventArgs e)
        {
            Image img = new Bitmap(Screen.AllScreens[0].Bounds.Width, Screen.AllScreens[0].Bounds.Height);//创建一个和屏幕同样大小的图像
            Graphics g = Graphics.FromImage(img);//绘制这个图像
            //将屏幕绘制到此图像,第一,二个Point是屏幕要截取的左上角的坐标和绘制到图像的左上角的坐标
            g.CopyFromScreen(new Point(0, 0), new Point(0, 0), Screen.AllScreens[0].Bounds.Size);
            this.BackgroundImage = img;
            this.FormBorderStyle = FormBorderStyle.None;
            this.Bounds = Screen.PrimaryScreen.Bounds;
            gra = this.CreateGraphics();//主要为了用户截取方便
        }
        private void Form3_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                down = true;
                firstPoint = e.Location;
            }
        }

        private void Form3_MouseUp(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                down = false;
            }
            if (e.Button == MouseButtons.Middle)
            {
                this.Close();
            }
        }

        private void Form3_MouseMove(object sender, MouseEventArgs e)
        {
            if (down)
            {
                gra.DrawImage(this.BackgroundImage, 0, 0);
                rectangle = new Rectangle(Math.Min(firstPoint.X, e.X), Math.Min(e.Y, firstPoint.Y), Math.Abs(e.X - firstPoint.X), Math.Abs(e.Y - firstPoint.Y));
                gra.DrawRectangle(p, rectangle);
            }
        }
        private void Form3_DoubleClick(object sender, MouseEventArgs e)
        {
            if (rectangle.Width != 0 && rectangle.Height != 0)
            {
                gra.DrawImage(this.BackgroundImage, 0, 0);
                Image im = new Bitmap(rectangle.Width, rectangle.Height);
                Graphics g = Graphics.FromImage(im);
                g.CopyFromScreen(rectangle.Location, new Point(0, 0), rectangle.Size);
                if (((MouseEventArgs)e).Button == MouseButtons.Left)
                {
                    Clipboard.Clear();
                    Clipboard.SetImage(im);
                    this.f4.Copy();
                    this.Close();
                }
            }
        }
    }
}

本文转载自:http://blog.csdn.net/smartsmile2012/article/details/8658162

深圳大道
粉丝 3
博文 877
码字总数 0
作品 0
深圳
架构师
私信 提问
C#在截屏时将截屏之前需要隐藏的控件也截入

最近我在项目中遇到一个让我十分头疼的问题,就是我在截屏时也将截屏之前隐藏的控件也截入了。 情况:我在Winform窗体有个截屏功能按钮,实现在调用WPF全屏后截屏,但在截屏WPF界面前将界面里...

38度6
2018/10/25
0
0
大家好,我是一个新手 ,不会用dotTrace6.0 性能测试工具 ,有没有人愿意教我一下呢

我搜了很多这个问题的资料 ,貌似我还是不会 ,我已经安装好了,但是不知道在哪里打开,不详细 ,我测试winform程序 。麻烦教我一下 ,附截屏更好

Anlien
2018/08/25
134
0
C# winform截图、web Cropper图片剪切、上传

今天又来一弹,写了个小功能,windows 桌面截图,web剪切图片上传的功能。 废话不多说,直接上图: 1、winform 截屏功能 图1 主窗体 点击全屏截图,就已经全屏截图了,截图后,图片保存在程序...

听风.
2018/08/10
0
0
C#借助Code UI Automation脱离VS黑盒自动化测试工具编写

本文摘要: 1:测试要求 2:在VS中运行自动化测试 3:脱离VS进行自动化测试 在上一文中《C#借助API实现黑盒自动化测试工具的编写》(http://www.cnblogs.com/luminji/archive/2010/11/03/186...

luminji
2010/11/18
0
0
在Winform程序中设置管理员权限及为用户组添加写入权限

在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行程序具有管理员权限或者设置运行程序的目录具有写入的权限,如果是在操作系统里面,我们可以设置运...

walb呀
2017/12/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

让《强化学习(第2版)》架起一座通往强化学习经典知识宝库的桥梁

上交大计算科学与工程系俞凯教授,5分钟口述讲解,带你快速认识了解年度重磅图书《强化学习(第二版)》! 在 AlphaGo战胜李世石之后,AlphaZero以其完全凭借自我学习超越人类在各种棋类游戏...

博文视点Bv
16分钟前
5
0
TLA7-EVM开发板的处理器、NOR FLASH、DDR3

TLA7-EVM开发板是一款由广州创龙基于Xilinx Artix-7系列FPGA自主研发的核心板+底板方式的开发板,可快速评估FPGA性能。核心板尺寸仅70mm*50mm,底板采用沉金无铅工艺的6层板设计,专业的PCB...

Tronlong创龙
25分钟前
4
0
UUID的变种-有序

为了解决UUID无序的问题,NHibernate在其主键生成方式中提供了Comb算法(combined guid/timestamp)。保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime)。 /// <summary> //...

Canaan_
26分钟前
4
0
Netty学习(6)——通道间数据传输

1. FileChannel实现通道间的数据传输 在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel传输到另外一个channel。 transferFrom() FileChannel的transferF...

江左煤郎
29分钟前
3
0
AngularDOM操作

gtandsn
30分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部