zoukankan      html  css  js  c++  java
  • GDI+:自定义控件时如何使用Region来输出特定区域

    这是我的一个小工具中用到的一个功能。这个工具需要能对图片进行一些编辑和保存

    image

    我我们的一个功能就是,在图片的任意位置双击之后,都会添加一个附加的控件出来,并且显示在图片上

    image

    看起来很不错,但是那个白色的正方形背景是在不好看,能不能只是用那个圆圈呢?下面这样显然更加好一些

    image

    那这是如何做到的呢?按说所有的Windows Forms控件在Render出来的时候,都会有一个矩形的区域的。看看下面代码吧

            protected override void OnPaint(PaintEventArgs e)
            {
                Graphics g = this.CreateGraphics();
                
                g.DrawEllipse(
                    new Pen(Color.Red),
                    new Rectangle(new Point(0, 0), new Size(this.Width-5,this.Height-5)));
    
                if (Selected)
                    g.FillEllipse(new SolidBrush(Color.Yellow), new Rectangle(new Point(0, 0), new Size(this.Width - 5, this.Height - 5)));
    
                GraphicsPath p = new GraphicsPath();
                p.AddEllipse(new Rectangle(new Point(0, 0), new Size(this.Width - 5, this.Height - 5)));
                this.Region = new Region(p);//设置控件的区域是一个圆圈
                
                g.Save();
            }

    关于控件的Region属性,也可以参考 http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.region.aspx

    按照这个思路,我们当然也可以画出某些带有圆角的控件,或者不规则的控件。尝试一下,你会改代码,让他输出下面这样的效果吗

    image

  • 相关阅读:
    字符串替换
    字符串查找
    字符串比较
    字节与字符串相互转换
    1365. How Many Numbers Are Smaller Than the Current Number
    1486. XOR Operation in an Array
    1431. Kids With the Greatest Number of Candies
    1470. Shuffle the Array
    1480. Running Sum of 1d Array
    【STM32H7教程】第56章 STM32H7的DMA2D应用之刷色块,位图和Alpha混合
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1654607.html
Copyright © 2011-2022 走看看