矩形和区域

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

         }

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值