zoukankan      html  css  js  c++  java
  • 在Winform中实现半透明遮罩层

    效果图如下,正常时:

    遮罩时:

    控件代码:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Drawing;
    using System.Windows.Forms;
    using System.ComponentModel;

    namespace MyOpaqueLayer
    {

        [ToolboxBitmap(
    typeof(MyOpaqueLayer))]
        
    public class MyOpaqueLayer : System.Windows.Forms.Control
        {
            
    private bool _transparentBG = true;
            
    private int _alpha = 125;


            
    private System.ComponentModel.Container components = new System.ComponentModel.Container();


            
    public MyOpaqueLayer()
                : 
    this(125true)
            {

            }


            
    public MyOpaqueLayer(int Alpha, bool showLoadingImage)
            {
                SetStyle(System.Windows.Forms.ControlStyles.Opaque, 
    true);
                
    base.CreateControl();
                
    this._alpha = Alpha;
                ;
                
    if (showLoadingImage)
                {
                    PictureBox pictureBox_Loading 
    = new PictureBox();
                    pictureBox_Loading.BackColor 
    = System.Drawing.Color.White;
                    pictureBox_Loading.Image 
    = global::MyOpaqueLayer.Properties.Resources.loading;
                    pictureBox_Loading.Name 
    = "pictureBox_Loading";
                    pictureBox_Loading.Size 
    = new System.Drawing.Size(4848);
                    pictureBox_Loading.SizeMode 
    = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
                    Point Location 
    = new Point(this.Location.X + (this.Width - pictureBox_Loading.Width) / 2this.Location.Y + (this.Height - pictureBox_Loading.Height) / 2);
                    pictureBox_Loading.Location 
    = Location;
                    pictureBox_Loading.Anchor 
    = AnchorStyles.None;
                    
    this.Controls.Add(pictureBox_Loading);
                }
            }


            
    protected override void Dispose(bool disposing)
            {
                
    if (disposing)
                {
                    
    if (!((components == null)))
                    {
                        components.Dispose();
                    }
                }
                
    base.Dispose(disposing);
            }

            
    /// <summary>
            
    /// 自定义绘制窗体
            
    /// </summary>
            
    /// <param name="e"></param>
            protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
            {
                
    float vlblControlWidth;
                
    float vlblControlHeight;

                Pen labelBorderPen;
                SolidBrush labelBackColorBrush;

                
    if (_transparentBG)
                {
                    Color drawColor 
    = Color.FromArgb(this._alpha, this.BackColor);
                    labelBorderPen 
    = new Pen(drawColor, 0);
                    labelBackColorBrush 
    = new SolidBrush(drawColor);
                }
                
    else
                {
                    labelBorderPen 
    = new Pen(this.BackColor, 0);
                    labelBackColorBrush 
    = new SolidBrush(this.BackColor);
                }
                
    base.OnPaint(e);
                vlblControlWidth 
    = this.Size.Width;
                vlblControlHeight 
    = this.Size.Height;
                e.Graphics.DrawRectangle(labelBorderPen, 
    00, vlblControlWidth, vlblControlHeight);
                e.Graphics.FillRectangle(labelBackColorBrush, 
    00, vlblControlWidth, vlblControlHeight);

            }
            
    /// <summary>
            
    /// 
            
    /// </summary>
            protected override CreateParams CreateParams//v1.10 
            {
                
    get
                {
                    CreateParams cp 
    = base.CreateParams;
                    cp.ExStyle 
    |= 0x20;  // 开启 WS_EX_TRANSPARENT,使控件支持透明
                    return cp;
                }
            }

            [Category(
    "myOpaqueLayer"), Description("是否使用透明,默认为True")]
            
    public bool TransparentBG
            {
                
    get { return _transparentBG; }
                
    set
                {
                    _transparentBG 
    = value;
                    
    this.Invalidate();
                }
            }

            [Category(
    "myOpaqueLayer"), Description("设置透明度")]
            
    public int Alpha
            {
                
    get { return _alpha; }
                
    set
                {
                    _alpha 
    = value;
                    
    this.Invalidate();
                }
            }

        }


    }

    源码下载:

    遮罩层源码

  • 相关阅读:
    在CentOS 7上安装Docker
    VMware虚拟机上安装CentOS 7
    5、Linux的常用命令
    3.Linux 系统目录结构
    2、Linux的关机方式
    zepto callback
    解callback嵌套
    debugger 调试的一些经验
    Chrome Timeline的指标说明:Blocked、Connect、Send、Wait、Receive
    jquery ajax promise
  • 原文地址:https://www.cnblogs.com/zhaobl/p/1642145.html
Copyright © 2011-2022 走看看