C#实现winform仿div+css半透明遮罩效果
本文实现在winform项目实现网页div+css关透明效果,挺帅的,在网页中要实现div的半透明遮罩层效果不难,在winform项目就不是这么容易了,下面我们来看下效果图先: 正常时:
文章来自学IT网:http://www.xueit.com/html/2010-01-08/21-1076980691437.html
下面我们来实现上图的效果控件源码:
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 (125, true ) { } 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(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); } /// <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(); } } } } 文章来自学IT网:http: //www.xueit.com/html/2010-01-08/21-1076980691437.html |
下载:https://files.cnblogs.com/xiaofengfeng/MyOpaqueLayer1.rar
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步