using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Text;
using System.Windows.Forms;
namespace TransparentPanelTest
{
public class TransparentPanel : Control
{
private Color _borderColor;
private int _borderWidth = 1;
private DashStyle _borderStyle = DashStyle.Solid;
private int _opacity = 125;
public TransparentPanel()
{
}
#region Property
[Category( "Custom" ), Description( "Border Color" )]
public Color BorderColor
{
set { _borderColor = value; }
get { return _borderColor; }
}
[Category( "Custom" ), Description( "Border Width" ), DefaultValue(1)]
public int BorderWidth
{
set
{
if (value < 0) value = 0;
_borderWidth = value;
}
get { return _borderWidth; }
}
[Category( "Custom" ), Description( "Border Style" ), DefaultValue(DashStyle.Solid)]
public DashStyle BorderStyle
{
set { this ._borderStyle = value; this .Invalidate(); }
get { return this ._borderStyle; }
}
[Bindable( true ), Category( "Custom" ), DefaultValue(125), Description( "背景的透明度. 有效值0-255" )]
public int Opacity
{
get { return _opacity; }
set
{
if (value > 255) value = 255;
else if (value < 0) value = 0;
_opacity = value;
this .Invalidate();
}
}
#endregion
protected override void OnPaintBackground(PaintEventArgs e)
{
//do not allow the background to be painted
}
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base .CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
if ( this ._opacity > 0)
{
e.Graphics.FillRectangle( new SolidBrush(Color.FromArgb( this ._opacity, this .BackColor)),
this .ClientRectangle);
}
if ( this ._borderWidth > 0)
{
Pen pen = new Pen( this ._borderColor, this ._borderWidth);
pen.DashStyle = this ._borderStyle;
e.Graphics.DrawRectangle(pen, e.ClipRectangle.Left, e.ClipRectangle.Top, this .Width - 1, this .Height - 1);
pen.Dispose();
}
}
}
}
|