using System;
|
using System.ComponentModel;
|
using System.Drawing;
|
using System.Windows.Forms;
|
|
namespace DPumpHydr.WinFrmUI.WenSkin.Controls
|
{
|
public class WenButtonTriangle : WenControl
|
{
|
|
|
public WenButtonTriangle() : base()
|
{
|
this.Size = new Size(32, 32);
|
this.BackColor = Color.Transparent;
|
}
|
|
#region 私有属性
|
|
private WenButtonTriangleStyle closeStyle = WenButtonTriangleStyle.Right;
|
private WenButtonTriangleStyle openStyle = WenButtonTriangleStyle.Bottom;
|
private bool state;
|
|
#endregion
|
|
|
#region 公有属性
|
|
[DefaultValue(WenButtonTriangleStyle.Right), Category("Wen"), Description("关闭样式箭头方向")]
|
public WenButtonTriangleStyle CloseStyle { get => closeStyle; set => closeStyle = value; }
|
[DefaultValue(WenButtonTriangleStyle.Bottom), Category("Wen"), Description("打开样式箭头方向")]
|
public WenButtonTriangleStyle OpenStyle { get => openStyle; set => openStyle = value; }
|
|
[DefaultValue(false), Category("Wen"), Description("开关状态")]
|
public bool State { get => state; set { state = value; this.Invalidate(); } }
|
|
[Category("Wen")]
|
[Description("按钮样式颜色")]
|
[RefreshProperties(RefreshProperties.Repaint)]
|
[DefaultValue(typeof(Color), "199,199,199")]
|
public Color ButtonColor { get; set; } = Color.FromArgb(199, 199, 199);
|
|
#endregion
|
|
protected override void OnSizeChanged(EventArgs e)
|
{
|
base.OnSizeChanged(e);
|
this.Height = this.Width;
|
}
|
protected override void OnClick(EventArgs e)
|
{
|
if (State)
|
State = false;
|
else
|
State = true;
|
base.OnClick(e);
|
}
|
|
protected override void OnMouseLeave(EventArgs e)
|
{
|
base.OnMouseLeave(e);
|
this.BackColor = Color.Transparent;
|
}
|
protected override void OnMouseEnter(EventArgs e)
|
{
|
base.OnMouseEnter(e);
|
this.BackColor = Color.FromArgb(63, 63, 65);
|
}
|
protected override void WenOnPaint(Graphics g, Rectangle rec, PaintEventArgs e)
|
{
|
base.WenOnPaint(g, rec, e);
|
|
if (State)
|
{
|
FillTriangle(OpenStyle, g, rec);
|
}
|
else
|
{
|
FillTriangle(CloseStyle, g, rec);
|
}
|
}
|
|
private void FillTriangle(WenButtonTriangleStyle style, Graphics g, Rectangle rec)
|
{
|
rec = new Rectangle(rec.X, rec.Y, rec.Width - 1, rec.Height - 1);
|
if (style == WenButtonTriangleStyle.Left)
|
FillTriangleLeft(g, rec);
|
if (style == WenButtonTriangleStyle.Right)
|
FillTriangleRitht(g, rec);
|
if (style == WenButtonTriangleStyle.Top)
|
FillTriangTop(g, rec);
|
if (style == WenButtonTriangleStyle.Bottom)
|
FillTriangBottom(g, rec);
|
}
|
|
|
private void FillTriangleRitht(Graphics g, Rectangle rec)
|
{
|
Point point1 = new Point(rec.X, rec.Y);
|
Point point2 = new Point(rec.X + rec.Width, rec.Y + rec.Height / 2);
|
Point point3 = new Point(rec.X, rec.Y + rec.Height);
|
GdiTriangLine(g, point1, point2, point3);
|
}
|
private void FillTriangleLeft(Graphics g, Rectangle rec)
|
{
|
Point point1 = new Point(rec.X + rec.Width, rec.Y);
|
Point point2 = new Point(rec.X, rec.Y + rec.Height / 2);
|
Point point3 = new Point(rec.X + rec.Width, rec.Y + rec.Height);
|
GdiTriangLine(g, point1, point2, point3);
|
}
|
private void FillTriangBottom(Graphics g, Rectangle rec)
|
{
|
Point point1 = new Point(rec.X, rec.Y);
|
Point point2 = new Point(rec.X + rec.Width / 2, rec.Y + rec.Y + rec.Height);
|
Point point3 = new Point(rec.X + rec.Width, rec.Y);
|
GdiTriangLine(g, point1, point2, point3);
|
}
|
private void FillTriangTop(Graphics g, Rectangle rec)
|
{
|
Point point1 = new Point(rec.X, rec.Y + rec.Height);
|
Point point2 = new Point(rec.X + rec.Width / 2, rec.Y);
|
Point point3 = new Point(rec.X + rec.Width, rec.Y + rec.Height);
|
//Point[] pntArr = { point1, point2, point3 };
|
//g.FillPolygon(GetBrush(ButtonColor), pntArr);
|
GdiTriangLine(g, point1, point2, point3);
|
}
|
|
//三点画线条
|
private void GdiTriangLine(Graphics g, Point point1, Point point2, Point point3)
|
{
|
using Pen pen = new Pen(new SolidBrush(ButtonColor), 1.6f);
|
g.DrawLine(pen, point1, point2);
|
g.DrawLine(pen, point2, point3);
|
}
|
}
|
|
//三角形按钮方向
|
public enum WenButtonTriangleStyle
|
{
|
Left = 1,
|
Right = 2,
|
Top = 3,
|
Bottom = 4,
|
}
|
}
|