ibcadmin 发表于 2014-12-19 09:34:20

C#实现屏幕截图,跟着鼠标显示图片

需要两个picturebox,一个放图片【转载博客园 ,代码未测试】

完整代码如下



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Xml;
namespace Test
{
    public partial class Form1 : Form
    {
      private bool MouseIsDown = false;
      private int _x, _y;
      private Rectangle MouseRect = Rectangle.Empty;
      public Form1()
      {
            InitializeComponent();
      }
      private void ResizeToRectangle(Point p)
      {
            DrawRectangle();
            MouseRect.Width = p.X - MouseRect.Left;
            MouseRect.Height = p.Y - MouseRect.Top;
            DrawRectangle();
      }
      private void DrawRectangle()
      {
            Rectangle rect = this.RectangleToScreen(MouseRect);
            ControlPaint.DrawReversibleFrame(rect, Color.White, FrameStyle.Dashed);

      }
      private void DrawStart(Point StartPoint)
      {
            barkPictureBox.Capture = true;
            Cursor.Clip = this.RectangleToScreen(new Rectangle(0, 0, ClientSize.Width, ClientSize.Height));
            MouseRect = new Rectangle(StartPoint.X, StartPoint.Y, 0, 0);
      }


      private void button1_Click(object sender, EventArgs e)
      {

      }


      void barkPictureBox_MouseUp(object sender, MouseEventArgs e)
      {
            barkPictureBox.Capture = false;
            Cursor.Clip = Rectangle.Empty;
            MouseIsDown = false;
            DrawRectangle();

            if (MouseRect.X == 0 || MouseRect.Y == 0 || MouseRect.Width == 0 || MouseRect.Height == 0)//如果区域有一个是0就返回
            {
            }
            else
            {
                ///代码
            }

            MouseRect = Rectangle.Empty;
            int sx = _x < e.X ? _x : e.X;
            int sy = _y < e.Y ? _y : e.Y;
            int w = Math.Abs(_x - e.X);
            int h = Math.Abs(_y - e.Y);
            Graphics g = Graphics.FromHwnd(pictureBox2.Handle);
            g.Clear(pictureBox2.BackColor);
            g.DrawImage(barkPictureBox.Image, new Rectangle(0, 0, w, h), sx, sy, w, h, GraphicsUnit.Pixel);
      }

      void barkPictureBox_MouseMove(object sender, MouseEventArgs e)
      {
            if (MouseIsDown) ResizeToRectangle(new Point(e.X + barkPictureBox.Location.X, e.Y + barkPictureBox.Location.Y));
         
      }

      void barkPictureBox_MouseDown(object sender, MouseEventArgs e)
      {
            _x = e.X;
            _y = e.Y;

            MouseIsDown = true;
            DrawStart(new Point(e.X + barkPictureBox.Location.X, e.Y + barkPictureBox.Location.Y));
      }




   

      private void Form1_Load(object sender, EventArgs e)
      {
            barkPictureBox.MouseDown += new MouseEventHandler(barkPictureBox_MouseDown);
            barkPictureBox.MouseMove += new MouseEventHandler(barkPictureBox_MouseMove);
            barkPictureBox.MouseUp += new MouseEventHandler(barkPictureBox_MouseUp);

      }
    }
}

condon 发表于 2014-12-20 10:14:28

运行没反应啊!
页: [1]
查看完整版本: C#实现屏幕截图,跟着鼠标显示图片