矩形和區域

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枚舉提供了可用於確定鼠標單擊位置的成員,其中包括LeftMiddleNoneRightXbutton1Xbutton2

 

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();

         }

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章