鼠标移动放大镜效果

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

namespace dataSource
{
    public partial class PictureForm : Form
    {
        Thread thDraw;
        delegate void myDrawRectangel();
        myDrawRectangel mydraw;
        private Point ptBegin = new Point();
        private bool blIsDrawRectangle = true;


        public PictureForm()
        {
            InitializeComponent();
        }

 


        private void PictureForm_Load(object sender, EventArgs e)
        {
            //图片背景初始化
       //     this.pictureBox1.Image = System.Drawing.Image.FromFile(@"D:\Image\MianPic.bmp");

            mydraw = new myDrawRectangel(ShowDrawRectangle);
            thDraw = new Thread(Run);
            thDraw.Start();


        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            if (blIsDrawRectangle)
            {
                e.Graphics.DrawRectangle(new Pen(Brushes.Black, 1), ptBegin.X, ptBegin.Y, 50, 50);
            }
        }

        private void Run()
        {
            while (true)
            {
                if (pictureBox1.Image != null)
                {
                    this.BeginInvoke(mydraw);
                }
                Thread.Sleep(50);
            }
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (thDraw != null)
            {
                thDraw.Abort();
            }

        }

        private void ShowDrawRectangle()
        {
            Rectangle rec = new Rectangle(ptBegin.X * pictureBox1.Image.Size.Width /220, ptBegin.Y * pictureBox1.Image.Size.Height / 300,
                                           50 * pictureBox1.Image.Size.Width / 400, 50 * pictureBox1.Image.Size.Height / 300);
            Graphics g = pictureBox2.CreateGraphics();
            g.DrawImage(pictureBox1.Image, pictureBox2.ClientRectangle, rec, GraphicsUnit.Pixel);
            g.Flush();
        }

        private void pictureBox1_MouseLeave(object sender, EventArgs e)
        {
            blIsDrawRectangle = false;
            pictureBox1.Refresh();

        }

        private void pictureBox1_MouseEnter(object sender, EventArgs e)
        {
            blIsDrawRectangle = true;

        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.X - 25 <= 0)
            {
                ptBegin.X = 0;
            }
            else if (pictureBox1.Size.Width - e.X <= 25)
            {
                ptBegin.X = pictureBox1.Size.Width-50;
            }
            else
            {
                ptBegin.X = e.X - 25;
            }

            if (e.Y - 25 <= 0)
            {
                ptBegin.Y = 0;
            }
            else if (pictureBox1.Size.Height - e.Y <= 25)
            {
                ptBegin.Y = pictureBox1.Size.Height - 50;
            }
            else
            {
                ptBegin.Y = e.Y - 25;
            }
            pictureBox1.Refresh();

        }

 

    }
}

你可能感兴趣的:(thread,object,image,null,Class)