1. 使用Rectangle結構體的方法
private void MethodsMenu_Click(object sender,
System.EventArgs e)
{
// Create a Graphics object
Graphics g = this.CreateGraphics();
// Create a Point & Size
PointF pt = new PointF(30.8f, 20.7f);
SizeF sz = new SizeF(60.0f, 40.0f);
// Create two rectangles
RectangleF rect1 = new RectangleF(pt, sz);
RectangleF rect2 =
new RectangleF(40.2f, 40.6f, 100.5f, 100.0f);
// Ceiling a rectangle
Rectangle rect3 = Rectangle.Ceiling(rect1);
// Truncate a rectangle
Rectangle rect4 = Rectangle.Truncate(rect1);
// Round a rectangle
Rectangle rect5 = Rectangle.Round(rect2);
// Draw rectangles
g.DrawRectangle(Pens.Black, rect3);
g.DrawRectangle(Pens.Red, rect5);
// Intersect a rectangle 交集
Rectangle isectRect =
Rectangle.Intersect(rect3, rect5);
// Fill rectangle
g.FillRectangle(
new SolidBrush(Color.Blue), isectRect);
// Inflate a recntangle
Size inflateSize = new Size(0, 40);
isectRect.Inflate(inflateSize);
// Draw rectangle
g.DrawRectangle(Pens.Blue, isectRect);
// Empty rectangle and set its properties
rect4 = Rectangle.Empty;
rect4.Location = new Point(50, 50);
rect4.X = 30;
rect4.Y = 40;
// Union rectangles 並集
Rectangle unionRect =
Rectangle.Union(rect4, rect5);
// Draw rectangle
g.DrawRectangle(Pens.Green, unionRect);
// Displose
g.Dispose();
}
2. Contains方法用於確定一個矩形或一個點是否在當前矩形的內部。如果在,Contains方法返回true,否則false。
確定單擊鼠標的位置是否在一個矩形內部。我們將檢查以確定單擊的是否是鼠標左鍵,然後創建一個矩形,並生產一條消息(如何單擊了鼠標左鍵)。
private void Form1_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e)
{
if(e.Button == MouseButtons.Left)
{
if (bigRect.Contains( new Point(e.X, e.Y)) )
MessageBox.Show("Clicked inside rectangle");
else
MessageBox.Show("Clicked outside rectangle");
}
}
//MouseEventArgs枚舉提供了可用於確定鼠標單擊位置的成員,其中包括Left、Middle、None、Right、Xbutton1和Xbutton2。
3. Region類
區域是指一個封閉圖形或窗體的內部。一個窗體有兩個區,即一個非工作區,一個工作區。非工作區不允許繪圖,它包括標題欄以及水平滾動條和垂直滾動條。
Region類沒有屬性,在構造了一個區域之後,應用程序可以使用Graphics類的FillRegion方法來填充此區域。
Region方法:
u Complement方法:將區域更新爲一個矩形的不與此區域相交的部分
private void menuItem7_Click(object sender, System.EventArgs e)
{
// Create a Graphics
Graphics g = this.CreateGraphics();
// Create two Rectangles
Rectangle rect1 = new Rectangle(20, 20, 60, 80);
Rectangle rect2 = new Rectangle(50, 30, 60, 80);
// Create two Regions
Region rgn1 = new Region(rect1);
Region rgn2 = new Region(rect2);
// Draw rectangles
g.DrawRectangle(Pens.Green, rect1);
g.DrawRectangle(Pens.Black, rect2);
// Complement can take a Rectangle, RectangleF,
// Region or a GraphicsPath as an argument
rgn1.Complement(rgn2);
// rgn1.Complement(rect2);
g.FillRegion(Brushes.Blue, rgn1);
// Dispose
g.Dispose();
}
u IsEmpty 和 IsInfinite方法:IsEmpty是否區域爲空。IsInfinite是否區域具有無限內部。
private void menuItem8_Click(object sender, System.EventArgs e)
{
// Create a Graphics object
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
// Create Rectangles and Regions
Rectangle rect1 =
new Rectangle(20, 20, 60, 80);
Rectangle rect2 =
new Rectangle(50, 30, 60, 80);
Region rgn1 = new Region(rect1);
Region rgn2 = new Region(rect2);
// If Region is not empty, empty it
if (! rgn1.IsEmpty(g))
rgn1.MakeEmpty();
// If Region is not infinite, infinite
// it
if (! rgn2.IsInfinite(g))
rgn2.MakeInfinite();
// Get bounds of the infinite region
RectangleF rect = rgn2.GetBounds(g);
// Display
MessageBox.Show(rect.ToString());
// Fill the region
g.FillRegion(Brushes.Red, rgn2);
// Dispose
g.Dispose();
}
u Exclude方法:將此區域更新爲區域內部不與一個矩形相交的部分。
private void menuItem9_Click(object sender, System.EventArgs e)
{
// Create Graphics object
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
// Create Rectangles
Rectangle rect1 = new Rectangle(20, 20, 60, 80);
Rectangle rect2 = new Rectangle(50, 30, 60, 80);
// Create Regions
Region rgn1 = new Region(rect1);
Region rgn2 = new Region(rect2);
// Draw rectangles
g.DrawRectangle(Pens.Green, rect1);
g.DrawRectangle(Pens.Black, rect2);
// Exclued the region
rgn1.Exclude(rgn2);
// Fill region after exclude
g.FillRegion(Brushes.Blue, rgn1);
// Dispose
g.Dispose();
}
u Union方法:將此區域更新爲它與給定圖形路徑的幷集。
private void menuItem10_Click(object sender, System.EventArgs e)
{
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
Rectangle rect1 = new Rectangle(20, 20, 60, 80);
Rectangle rect2 = new Rectangle(50, 30, 60, 80);
Region rgn1 = new Region(rect1);
Region rgn2 = new Region(rect2);
g.DrawRectangle(Pens.Green, rect1);
g.DrawRectangle(Pens.Black, rect2);
// Complement can take a Rectangle, RectangleF,
// Region or a GraphicsPath as an argument
rgn1.Union(rgn2);
// rgn1.Complement(rect2);
g.FillRegion(Brushes.Blue, rgn1);
// Dispose
g.Dispose();
}
u Xor方法:將此區域更新爲它與給定圖形路徑的幷集再減去交集。
private void menuItem11_Click(object sender, System.EventArgs e)
{
// Create Graphics object
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
// Create Rectangles
Rectangle rect1 = new Rectangle(20, 20, 60, 80);
Rectangle rect2 = new Rectangle(50, 30, 60, 80);
// Create Regions
Region rgn1 = new Region(rect1);
Region rgn2 = new Region(rect2);
// Draw Rectangles
g.DrawRectangle(Pens.Green, rect1);
g.DrawRectangle(Pens.Black, rect2);
// Xoring two regions
rgn1.Xor(rgn2);
// Fill the region after Xoring
g.FillRegion(Brushes.Blue, rgn1);
// Dispose
g.Dispose();
}
u Intersect方法:將此區域更新爲它與給定圖形路徑的交集。
private void menuItem12_Click(object sender, System.EventArgs e)
{
Graphics g = this.CreateGraphics();
g.Clear(this.BackColor);
Rectangle rect1 = new Rectangle(20, 20, 60, 80);
Rectangle rect2 = new Rectangle(50, 30, 60, 80);
Region rgn1 = new Region(rect1);
Region rgn2 = new Region(rect2);
g.DrawRectangle(Pens.Green, rect1);
g.DrawRectangle(Pens.Black, rect2);
// Complement can take a Rectangle, RectangleF,
// Region or a GraphicsPath as an argument
rgn1.Intersect(rgn2);
// rgn1.Complement(rect2);
g.FillRegion(Brushes.Blue, rgn1);
// Dispose
g.Dispose();
}