全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#实现小截屏软件功能

第一次写博客,文笔较差,将就看吧

日常生活中会经常使用到截屏功能,使用最多的无非就是Windows自带的截图工具、QQ截图和PrintScreen键,但要达到截图到word或保存到文件,需要鼠标选择多次。比如我们想截图并将图插入到Word中,不需要保存图片,我们希望直接点击截图按钮,选择截图区域,Ctrl+V简单三步就行了(感觉说了好多废话),切入正题。

1.基本功能

选择屏幕区域后提醒你保存所截的图片,或直接将所截图片放到剪切板里(以便用Ctrl+V粘贴)。

2.界面设计

界面很简单,无非就是可实现以上功能的两个按钮和其他文字,见图:

界面的属性需要注意几个问题:

1)窗口设为固定大小,并禁用窗口最大化(因为我们不希望窗口大小会变)

2)窗口最好设为顶置

3)把两个文字label和两个按钮都放到一个panel里,以便于后面程序对控件属性的操作

4)那么大的按钮,最好改变一下它的样式,还可以设置背景为gif动图

3.功能实现

那么关键问题来了,怎么截图呢?见下图

原理其实很简单,就是在点击按钮后,窗口变为全屏覆盖在屏幕最上方,并变为半透明,使你能看到窗口下面的屏幕内容,然后拖动鼠标(此时其实是在软件的主窗口上拖动,这样就方便程序捕捉鼠标坐标了),根据坐标在屏幕上绘制选框,接着松开鼠标后,根据鼠标落下和松开的坐标,截取屏幕,最后保存或复制到剪切板。

4.敲代码吧

using System;
using System.Windows.Forms;
using System.Drawing;//绘图要用
using System.Threading;//延时函数要用

namespace 截屏
{
  public partial class Form1 : Form
  {
    bool mouseDown = false, havePainted = false;
    Point start, end;
    Point start1, end1;
    Size size = new Size(0, 0);
    bool saveFile = true;
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      ReadyToCaptrue();
      saveFile = true;
    }

    private void Form1_MouseDown(object sender, MouseEventArgs e)
    {
      start = e.Location;
      mouseDown = true;
    }

    private void Form1_MouseUp(object sender, MouseEventArgs e)
    {
      if (size.Width != 0 && size.Height != 0)
      {
        ControlPaint.DrawReversibleFrame(new Rectangle(start1, size), Color.Transparent, FrameStyle.Dashed);
        havePainted = false;
      }
      end = e.Location;
      if (start.X > end.X)
      {
        int temp = end.X;
        end.X = start.X;
        start.X = temp;
      }

      if (start.Y > end.Y)
      {
        int temp = end.Y;
        end.Y = start.Y;
        start.Y = temp;
      }
      this.Opacity = 0.0;
      Thread.Sleep(200);
      if (end.X - start.X > 0 && end.Y - start.Y > 0)
      {
        Bitmap bit = new Bitmap(end.X - start.X, end.Y - start.Y);
        Graphics g = Graphics.FromImage(bit);
        g.CopyFromScreen(start, new Point(0, 0), bit.Size);
        if (saveFile)
        {
          SaveFileDialog saveFileDialog = new SaveFileDialog();
          saveFileDialog.Filter = "png|*.png|bmp|*.bmp|jpg|*.jpg|gif|*.gif";
          if (saveFileDialog.ShowDialog() != DialogResult.Cancel)
          {
            bit.Save(saveFileDialog.FileName);
          }
        }
        else
        {
          Clipboard.SetImage(bit);
        }
        g.Dispose();
      }
      this.WindowState = FormWindowState.Normal;
      this.FormBorderStyle = FormBorderStyle.FixedSingle;
      panel1.Visible = true;
      this.Opacity = 1;
      mouseDown = false;
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
      if (mouseDown)
      {
        if (size.Width != 0 && size.Height != 0 && havePainted)
        {
          ControlPaint.DrawReversibleFrame(new Rectangle(start1, size), Color.Transparent, FrameStyle.Dashed);
        }
        end1 = e.Location;
        size.Width = Math.Abs(end1.X - start.X);
        size.Height = Math.Abs(end1.Y - start.Y);
        start1.X = (start.X > end1.X) ? end1.X : start.X;
        start1.Y = (start.Y > end1.Y) ? end1.Y : start.Y;

        if (size.Width != 0 && size.Height != 0)
        {
          ControlPaint.DrawReversibleFrame(new Rectangle(start1, size), Color.Transparent, FrameStyle.Dashed);
          havePainted = true;
        }
      }
    }

    private void button2_Click(object sender, EventArgs e)
    {
      ReadyToCaptrue();
      saveFile = false;
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void ReadyToCaptrue()
    {
      this.Opacity = 0.1;
      panel1.Visible = false;
      this.FormBorderStyle = FormBorderStyle.None;
      this.WindowState = FormWindowState.Maximized;
    }
  }
}
 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# C#  # 截图  # C#截图程序类似腾讯QQ截图实现代码  # 解决C# 截取当前程序窗口指定位置截图的实现方法  # c#实现winform屏幕截图并保存的示例  # 解决C#全屏幕截图的实现方法  # C#实现网页截图功能  # 对指定的网页进行截图的效果 C#版  # c# 控件截图的简单实例  # C#实现类似qq的屏幕截图程序  # C#实现通过ffmpeg从flv视频文件中截图的方法  # C#实现属于自己的QQ截图工具  # 鼠标  # 设为  # 要用  # 拖动  # 是在  # 来了  # 剪切板  # 还可以  # 最多  # 不需要  # 说了  # 很简单  # 并将  # 使你  # 自带  # 日常生活  # 那么大  # 全屏  # 但要  # 看吧 


相关文章: 详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  香港服务器租用每月最低只需15元?  已有域名能否直接搭建网站?  大型企业网站制作流程,做网站需要注册公司吗?  高端建站三要素:定制模板、企业官网与响应式设计优化  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  导航网站建站方案与优化指南:一站式高效搭建技巧解析  图册素材网站设计制作软件,图册的导出方式有几种?  建站主机是否属于云主机类型?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  如何快速上传自定义模板至建站之星?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  如何快速搭建高效可靠的建站解决方案?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  如何快速查询域名建站关键信息?  如何高效利用亚马逊云主机搭建企业网站?  做企业网站制作流程,企业网站制作基本流程有哪些?  建站主机如何选?性能与价格怎样平衡?  宝塔建站无法访问?如何排查配置与端口问题?  网站微信制作软件,如何制作微信链接?  如何在VPS电脑上快速搭建网站?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  Android自定义控件实现温度旋转按钮效果  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  高防服务器租用指南:配置选择与快速部署攻略  长沙企业网站制作哪家好,长沙水业集团官方网站?  python的本地网站制作,如何创建本地站点?  建站之星ASP如何实现CMS高效搭建与安全管理?  名字制作网站免费,所有小说网站的名字?  h5网站制作工具有哪些,h5页面制作工具有哪些?  建站之星×万网:智能建站系统+自助建站平台一键生成  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  如何用5美元大硬盘VPS安全高效搭建个人网站?  建站之星2.7模板快速切换与批量管理功能操作指南  网站企业制作流程,用什么语言做企业网站比较好?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  广州商城建站系统开发成本与周期如何控制?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  黑客入侵网站服务器的常见手法有哪些?  如何在新浪SAE免费搭建个人博客?  C#怎么创建控制台应用 C# Console App项目创建方法  太平洋网站制作公司,网络用语太平洋是什么意思?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。