C#语言Windows程序设计

//设计一个鼠标来绘制矩形框的程序,即当按下鼠标左键并拖动至某个位置后释放鼠标时,可根据按下鼠标时的第一个点和释放鼠标时的第2个点来确定并绘制改矩形.


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


namespace _11203070203_7
{
    public partial class Form1 : Form
    {
        private bool mouseStatus = false;//鼠标状态,false为松开
        private Point startPoint;//鼠标按下的点
        private Point endPoint;//
        private Rectangle currRect;//当前正在绘制的矩形
        private int minStartX, minStartY, maxEndX, maxEndY;//最大重绘矩形的上下左右的坐标,这样重绘的效率更高。
        public Form1()
        {
            InitializeComponent();
            //创建图像
            g = this.pictureBox1.CreateGraphics();
        }
        
        //定义划线起点X,Y坐标
            int LineStartX = 0;
            int LineStartY = 0;
        
           
            //定义绘图对象
            Graphics g ;
            //处置画线起点以便鼠标移动时画线
            private void pictureBox1_MouseDown(object sender , System.Windows.Forms.MouseEventArgs e)
            {
                mouseStatus = true;
                startPoint.X = e.X;
                startPoint.Y = e.Y;
                //重新一个矩形,重置最大重绘矩形的上下左右的坐标
                minStartX = e.X;
                minStartY = e.Y;
                maxEndX = e.X;
                maxEndY = e.Y;
         
            }
    
            private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                if (mouseStatus)
                {
                    endPoint.X = e.X; endPoint.Y = e.Y;
                    //这一段是获取要绘制矩形的上下左右的坐标,如果不这样处理的话,只有从左上开始往右下角才能画出矩形。
                    //这样处理的话,可以任意方向,当然中途可以更换方向。
                    int realStartX = Math.Min(startPoint.X, endPoint.X);
                    int realStartY = Math.Min(startPoint.Y, endPoint.Y);
                    int realEndX = Math.Max(startPoint.X, endPoint.X);
                    int realEndY = Math.Max(startPoint.Y, endPoint.Y);


                    minStartX = Math.Min(minStartX, realStartX);
                    minStartY = Math.Min(minStartY, realStartY);
                    maxEndX = Math.Max(maxEndX, realEndX);
                    maxEndY = Math.Max(maxEndY, realEndY);


                   
                    //一下是为了获取最大重绘矩形。
                    Rectangle refeshRect = new Rectangle(minStartX, minStartY, maxEndX - minStartX, maxEndY - minStartY);
                    refeshRect.Inflate(1, 1);//重绘矩形的大小扩展1个单位
                    this.Invalidate(refeshRect);//失效一个区域,并使其重绘。
                }
            }
  
            private void pictureBox1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                mouseStatus = false;
                endPoint.X = e.X; endPoint.Y = e.Y;
                int realStartX = Math.Min(startPoint.X, endPoint.X);
                int realStartY = Math.Min(startPoint.Y, endPoint.Y);
                int realEndX = Math.Max(startPoint.X, endPoint.X);
                int realEndY = Math.Max(startPoint.Y, endPoint.Y);
               
                
                this.Invalidate();//重绘整个界面              
                g.DrawRectangle(new Pen(Color.Blue, 2), realStartX, realStartY, realEndX - realStartX, realEndY - realStartY);
             
            }




        private void Form1_Load(object sender, EventArgs e)
        {




        }


        private void button1_Click(object sender, EventArgs e)
        {
            pictureBox1.Refresh();
        }




    }

}



你可能感兴趣的:(c#)