📄 glassbutton.cs
字号:
}
using (LinearGradientBrush br = new LinearGradientBrush(rect2, Color.FromArgb(opacity, shineColor), Color.FromArgb(opacity / 3, shineColor), LinearGradientMode.Vertical))
{
g.FillPath(br, bh);
}
}
rect2.Height -= 2;
}
#endregion
#region " black border "
using (GraphicsPath bb = CreateRoundRectangle(rect, 3))
{
using (Pen p = new Pen(innerBorderColor))
{
g.DrawPath(p, bb);
}
}
#endregion
g.SmoothingMode = sm;
}
private void DrawButtonForeground(Graphics g)
{
if (Focused && ShowFocusCues/* && isFocusedByKey*/)
{
Rectangle rect = ClientRectangle;
rect.Inflate(-4, -4);
ControlPaint.DrawFocusRectangle(g, rect);
}
}
private Button _imageButton;
private void DrawForegroundFromButton(PaintEventArgs pevent)
{
if (_imageButton == null)
{
_imageButton = new Button();
_imageButton.Parent = new TransparentControl();
_imageButton.SuspendLayout();
_imageButton.BackColor = Color.Transparent;
_imageButton.FlatAppearance.BorderSize = 0;
_imageButton.FlatStyle = FlatStyle.Flat;
}
else
{
_imageButton.SuspendLayout();
}
_imageButton.AutoEllipsis = AutoEllipsis;
if (Enabled)
{
_imageButton.ForeColor = ForeColor;
}
else
{
_imageButton.ForeColor = Color.FromArgb((3 * ForeColor.R + _backColor.R) >> 2,
(3 * ForeColor.G + _backColor.G) >> 2,
(3 * ForeColor.B + _backColor.B) >> 2);
}
_imageButton.Font = Font;
_imageButton.RightToLeft = RightToLeft;
_imageButton.Image = Image;
if (Image != null && !Enabled)
{
Size size = Image.Size;
float[][] newColorMatrix = new float[5][];
newColorMatrix[0] = new float[] { 0.2125f, 0.2125f, 0.2125f, 0f, 0f };
newColorMatrix[1] = new float[] { 0.2577f, 0.2577f, 0.2577f, 0f, 0f };
newColorMatrix[2] = new float[] { 0.0361f, 0.0361f, 0.0361f, 0f, 0f };
float[] arr = new float[5];
arr[3] = 1f;
newColorMatrix[3] = arr;
newColorMatrix[4] = new float[] { 0.38f, 0.38f, 0.38f, 0f, 1f };
System.Drawing.Imaging.ColorMatrix matrix = new System.Drawing.Imaging.ColorMatrix(newColorMatrix);
System.Drawing.Imaging.ImageAttributes disabledImageAttr = new System.Drawing.Imaging.ImageAttributes();
disabledImageAttr.ClearColorKey();
disabledImageAttr.SetColorMatrix(matrix);
_imageButton.Image = new Bitmap(Image.Width, Image.Height);
using (Graphics gr = Graphics.FromImage(_imageButton.Image))
{
gr.DrawImage(Image, new Rectangle(0, 0, size.Width, size.Height), 0, 0, size.Width, size.Height, GraphicsUnit.Pixel, disabledImageAttr);
}
}
_imageButton.ImageAlign = ImageAlign;
_imageButton.ImageIndex = ImageIndex;
_imageButton.ImageKey = ImageKey;
_imageButton.ImageList = ImageList;
_imageButton.Padding = Padding;
_imageButton.Size = Size;
_imageButton.Text = Text;
_imageButton.TextAlign = TextAlign;
_imageButton.TextImageRelation = TextImageRelation;
_imageButton.UseCompatibleTextRendering = UseCompatibleTextRendering;
_imageButton.UseMnemonic = UseMnemonic;
_imageButton.ResumeLayout();
InvokePaint(_imageButton, pevent);
if (_imageButton.Image != null && _imageButton.Image != Image)
{
_imageButton.Image.Dispose();
_imageButton.Image = null;
}
}
private class TransparentControl : Control
{
protected override void OnPaintBackground(PaintEventArgs pevent) { }
protected override void OnPaint(PaintEventArgs e) { }
}
private static GraphicsPath CreateRoundRectangle(Rectangle rectangle, int radius)
{
GraphicsPath path = new GraphicsPath();
int l = rectangle.Left;
int t = rectangle.Top;
int w = rectangle.Width;
int h = rectangle.Height;
int d = radius << 1;
path.AddArc(l, t, d, d, 180, 90); // topleft
path.AddLine(l + radius, t, l + w - radius, t); // top
path.AddArc(l + w - d, t, d, d, 270, 90); // topright
path.AddLine(l + w, t + radius, l + w, t + h - radius); // right
path.AddArc(l + w - d, t + h - d, d, d, 0, 90); // bottomright
path.AddLine(l + w - radius, t + h, l + radius, t + h); // bottom
path.AddArc(l, t + h - d, d, d, 90, 90); // bottomleft
path.AddLine(l, t + h - radius, l, t + radius); // left
path.CloseFigure();
return path;
}
private static GraphicsPath CreateTopRoundRectangle(Rectangle rectangle, int radius)
{
GraphicsPath path = new GraphicsPath();
int l = rectangle.Left;
int t = rectangle.Top;
int w = rectangle.Width;
int h = rectangle.Height;
int d = radius << 1;
path.AddArc(l, t, d, d, 180, 90); // topleft
path.AddLine(l + radius, t, l + w - radius, t); // top
path.AddArc(l + w - d, t, d, d, 270, 90); // topright
path.AddLine(l + w, t + radius, l + w, t + h); // right
path.AddLine(l + w, t + h, l, t + h); // bottom
path.AddLine(l, t + h, l, t + radius); // left
path.CloseFigure();
return path;
}
private static GraphicsPath CreateBottomRadialPath(Rectangle rectangle)
{
GraphicsPath path = new GraphicsPath();
RectangleF rect = rectangle;
rect.X -= rect.Width * .35f;
rect.Y -= rect.Height * .15f;
rect.Width *= 1.7f;
rect.Height *= 2.3f;
path.AddEllipse(rect);
path.CloseFigure();
return path;
}
#endregion
#region " Unused Properties & Events "
/// <summary>This property is not relevant for this class.</summary>
/// <returns>This property is not relevant for this class.</returns>
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]
public new FlatButtonAppearance FlatAppearance
{
get { return base.FlatAppearance; }
}
/// <summary>This property is not relevant for this class.</summary>
/// <returns>This property is not relevant for this class.</returns>
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]
public new FlatStyle FlatStyle
{
get { return base.FlatStyle; }
set { base.FlatStyle = value; }
}
/// <summary>This property is not relevant for this class.</summary>
/// <returns>This property is not relevant for this class.</returns>
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), EditorBrowsable(EditorBrowsableState.Never)]
public new bool UseVisualStyleBackColor
{
get { return base.UseVisualStyleBackColor; }
set { base.UseVisualStyleBackColor = value; }
}
#endregion
#region " Animation Support "
private List<Image> _frames;
private const int FRAME_DISABLED = 0;
private const int FRAME_PRESSED = 1;
private const int FRAME_NORMAL = 2;
private const int FRAME_ANIMATED = 3;
private bool HasAnimationFrames
{
get
{
return _frames != null && _frames.Count > FRAME_ANIMATED;
}
}
private void CreateFrames()
{
CreateFrames(false);
}
private void CreateFrames(bool withAnimationFrames)
{
DestroyFrames();
if (!IsHandleCreated)
{
return;
}
if (_frames == null)
{
_frames = new List<Image>();
}
_frames.Add(CreateBackgroundFrame(false, false, false, false, 0));
_frames.Add(CreateBackgroundFrame(true, true, false, true, 0));
_frames.Add(CreateBackgroundFrame(false, false, false, true, 0));
if (!withAnimationFrames)
{
return;
}
for (int i = 0; i < framesCount; i++)
{
_frames.Add(CreateBackgroundFrame(false, true, true, true, (float)i / (framesCount - 1F)));
}
}
private void DestroyFrames()
{
if (_frames != null)
{
while (_frames.Count > 0)
{
_frames[_frames.Count - 1].Dispose();
_frames.RemoveAt(_frames.Count - 1);
}
}
}
private const int animationLength = 300;
private const int framesCount = 10;
private int _currentFrame;
private int _direction;
private bool IsAnimating
{
get
{
return _direction != 0;
}
}
private void FadeIn()
{
_direction = 1;
timer.Enabled = true;
}
private void FadeOut()
{
_direction = -1;
timer.Enabled = true;
}
private void timer_Tick(object sender, EventArgs e)
{
if (!timer.Enabled)
{
return;
}
Refresh();
_currentFrame += _direction;
if (_currentFrame == -1)
{
_currentFrame = 0;
timer.Enabled = false;
_direction = 0;
return;
}
if (_currentFrame == framesCount)
{
_currentFrame = framesCount - 1;
timer.Enabled = false;
_direction = 0;
}
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -