怎样用c#画图形,例如:矩形.
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/07 23:47:53
怎样用c#画图形,例如:矩形.
怎样用c#画图形,例如:矩形.
怎样用c#画图形,例如:矩形.
绘制矩形
用 GDI+ 绘制矩形与绘制直线类似.若要绘制矩形,需要 Graphics 对象和 Pen 对象.Graphics 对象提供 DrawRectangle 方法,Pen 对象存储属性(例如线宽和颜色).将 Pen 对象作为参数之一传递给 DrawRectangle 方法.下面的示例绘制了一个矩形,其左上角位于 (100,50),宽度为 80,高度为 40:
myGraphics.DrawRectangle(myPen,100,50,80,40);
DrawRectangle 是 Graphics 类的一个重载方法,因此,有数种为其提供参数的方式.例如,可构造 Rectangle 对象并将 Rectangle 对象作为参数传递给 DrawRectangle 方法:
Rectangle myRectangle = new Rectangle(100,50,80,40);
myGraphics.DrawRectangle(myPen,myRectangle);
Rectangle 对象具有用于处理和收集矩形相关信息的方法和属性.例如,Inflate 和 Offset 方法可更改矩形的大小和位置.IntersectsWith 方法判断矩形是否与另一给定矩形相交,Contains 方法判断一个给定点是否在该矩形内.
具体代码:
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Collections.Generic;
namespace ReverseArray
{
public partial class Form1 :Form
{
private bool mouseStatus = false;//鼠标状态,false为松开
private List rectList = new List();//存储所有画过的矩形
private Point startPoint;//鼠标按下的点
private Point endPoint;//
private Rectangle currRect;//当前正在绘制的举行
private int minStartX,minStartY,maxEndX,maxEndY;//最大重绘矩形的上下左右的坐标,这样重绘的效率更高.
public Form1()
{
InitializeComponent();
}
private void Form1_MouseDown(object sender,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 Form1_MouseMove(object sender,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);
currRect = new Rectangle(realStartX,realStartY,realEndX - realStartX,realEndY - realStartY);
//一下是为了获取最大重绘矩形.
Rectangle refeshRect = new Rectangle(minStartX,minStartY,maxEndX - minStartX,maxEndY - minStartY);
refeshRect.Inflate(1,1);//重绘矩形的大小扩展1个单位
this.Invalidate(refeshRect);//失效一个区域,并使其重绘.
}
}
private void Form1_MouseUp(object sender,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);
currRect = new Rectangle(realStartX,realStartY,realEndX - realStartX,realEndY - realStartY);
rectList.Add(currRect);//当前矩形算是被认可了,所以存起来
this.Invalidate();//重绘整个界面
}
private void Form1_Paint(object sender,PaintEventArgs e)//处理重绘情况
{
Graphics g = e.Graphics;
g.Clear(this.BackColor);
g.DrawRectangle(new Pen(Color.Red,1),currRect);
foreach (Rectangle rect in rectList)
g.DrawRectangle(new Pen(Color.Red,1),rect);
}
}
}