本文實現在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
下載:http://files.cnblogs.com/xiaofengfeng/MyOpaqueLayer1.rar