zoukankan      html  css  js  c++  java
  • Winform下透明Panel

    网上很多写着透明Panel的方法,都是把BackColor属性设置为透明,然后指定Parent,实验了一下,对于部分情况下,是可用的,例如下层本身有自带的控件,但是,如果是用Graphic绘制的内容,上层放一个设置了BackColor为透明的Panel则不起作用。

    Google了一下,在Stack Overflow上找到了一个自定义透明Panel

    public class ExtendedPanel : Panel
        {
            private const int WS_EX_TRANSPARENT = 0x20;
            public ExtendedPanel()
            {
                SetStyle(ControlStyles.Opaque, true);
            }
    
            private int opacity = 50;
            [DefaultValue(50)]
            public int Opacity
            {
                get
                {
                    return this.opacity;
                }
                set
                {
                    if (value < 0 || value > 100)
                        throw new ArgumentException("value must be between 0 and 100");
                    this.opacity = value;
                }
            }
            protected override CreateParams CreateParams
            {
                get
                {
                    CreateParams cp = base.CreateParams;
                    cp.ExStyle = cp.ExStyle | WS_EX_TRANSPARENT;
                    return cp;
                }
            }
            protected override void OnPaint(PaintEventArgs e)
            {
                using (var brush = new SolidBrush(Color.FromArgb(this.opacity * 255 / 100, this.BackColor)))
                {
                    e.Graphics.FillRectangle(brush, this.ClientRectangle);
                }
                base.OnPaint(e);
            }
        }

    这个自定义Panel可以解决问题,下图就是效果,透明的灰色是ExtendedPanel,黑色画线部分则是Graphic绘制的。

  • 相关阅读:
    具体解释协方差与协方差矩阵
    百度地图SDK for Android v2.1.3全新发布
    奇妙的等式
    Canny边缘检测及C++实现
    移动火柴问题
    移动火柴问题
    奇妙的等式 && 精妙的证明(二)
    奇妙的等式 && 精妙的证明(二)
    拉马努金恒等式
    拉马努金恒等式
  • 原文地址:https://www.cnblogs.com/ZXdeveloper/p/10636406.html
Copyright © 2011-2022 走看看