自定义 半透膜遮罩

 
 
using System; using System.Drawing; using System.Windows.Forms; using System.ComponentModel; namespace MyOpaqueLayer { /// <summary> /// 自定义控件:半透明控件 /// </summary> /* * [ToolboxBitmap(typeof(MyOpaqueLayer))] * 用于指定当把你做好的自定义控件添加到工具栏时,工具栏显示的图标。 * 正确写法应该是 * [ToolboxBitmap(typeof(XXXXControl),"xxx.bmp")] * 其中XXXXControl是你的自定义控件,"xxx.bmp"是你要用的图标名称。 */ [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( 125, true) { } public MyOpaqueLayer( int Alpha, bool IsShowLoadingImage) { SetStyle(System.Windows.Forms.ControlStyles.Opaque, true); base.CreateControl(); this._alpha = Alpha; if (IsShowLoadingImage) { PictureBox pictureBox_Loading = new PictureBox(); pictureBox_Loading.BackColor = System.Drawing.Color.White; pictureBox_Loading.Image = 加载中.Properties.Resources.loading; pictureBox_Loading.Name = " pictureBox_Loading "; pictureBox_Loading.Size = new System.Drawing.Size( 48, 48); pictureBox_Loading.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; Point Location = new Point( this.Location.X + ( this.Width - pictureBox_Loading.Width) / 2, this.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, 0, 0, vlblControlWidth, vlblControlHeight); e.Graphics.FillRectangle(labelBackColorBrush, 0, 0, vlblControlWidth, vlblControlHeight); } protected override CreateParams CreateParams // v1.10 { get { CreateParams cp = base.CreateParams; cp.ExStyle |= 0x00000020; // 0x20; // 开启 WS_EX_TRANSPARENT,使控件支持透明 return cp; } } /* * [Category("myOpaqueLayer"), Description("是否使用透明,默认为True")] * 一般用于说明你自定义控件的属性(Property)。 * Category用于说明该属性属于哪个分类,Description自然就是该属性的含义解释。 */ [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(); } } } }

OpaqueCommand的方法:ShowOpaqueLayer(显示遮罩层)和HideOpaqueLayer(隐藏遮罩层)

 
 
using System; using System.Windows.Forms; namespace 加载中 { class OpaqueCommand { private MyOpaqueLayer.MyOpaqueLayer m_OpaqueLayer = null; // 半透明蒙板层 /// <summary> /// 显示遮罩层 /// </summary> /// <param name="control"> 控件 </param> /// <param name="alpha"> 透明度 </param> /// <param name="isShowLoadingImage"> 是否显示图标 </param> public void ShowOpaqueLayer(Control control, int alpha, bool isShowLoadingImage) { try { if ( this.m_OpaqueLayer == null) { this.m_OpaqueLayer = new MyOpaqueLayer.MyOpaqueLayer(alpha, isShowLoadingImage); control.Controls.Add( this.m_OpaqueLayer); this.m_OpaqueLayer.Dock = DockStyle.Fill; this.m_OpaqueLayer.BringToFront(); } this.m_OpaqueLayer.Enabled = true; this.m_OpaqueLayer.Visible = true; } catch { } } /// <summary> /// 隐藏遮罩层 /// </summary> public void HideOpaqueLayer() { try { if ( this.m_OpaqueLayer != null) { this.m_OpaqueLayer.Visible = false; this.m_OpaqueLayer.Enabled = false; } } catch(Exception ex) { // MessageBox.Show(ex.Message); } } } }

源码下载:自定义半透明遮罩层-源码.rar files.cnblogs.com/JuneZhang/%E8%87%AA%E5%AE%9A%E4%B9%89%E5%8D%8A%E9%80%8F%E6%98%8E%E9%81%AE%E7%BD%A9%E5%B1%82-%E6%BA%90%E7%A0%81.rar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值