using System;
|
using System.ComponentModel;
|
using System.Drawing;
|
using System.Windows.Forms;
|
|
namespace DPumpHydr.WinFrmUI.WenSkin.Controls
|
{
|
public partial class WenCircleProgress : WenControl
|
{
|
public WenCircleProgress():base()
|
{
|
}
|
#region 私有属性
|
private int value = 0;
|
#endregion
|
|
#region 公有属性
|
[Category("Wen")]
|
[Description("圆点大小")]
|
[DefaultValue(40)]
|
[RefreshProperties(RefreshProperties.Repaint)]
|
public int PSize { get; set; } = 40;
|
|
[Category("Wen")]
|
[Description("当前进度值")]
|
[DefaultValue(0)]
|
[RefreshProperties(RefreshProperties.Repaint)]
|
public int Value
|
{
|
get => this.value;
|
set
|
{
|
this.value = value > 100 ? 100 : value;
|
this.Invalidate();
|
}
|
}
|
#endregion
|
|
|
protected override void OnSizeChanged(EventArgs e)
|
{
|
base.OnSizeChanged(e);
|
Width = Height;
|
}
|
|
protected override void OnPaint(PaintEventArgs e)
|
{
|
base.OnPaint(e);
|
CircleRe(e);
|
}
|
|
//绘制圆 分别分布点
|
private void CircleRe(PaintEventArgs e)
|
{
|
Graphics g = e.Graphics;
|
ControlHelper.SetGDIHigh(g);
|
|
//改变绘制的圆点,便于计算 和数学方向一致
|
|
g.TranslateTransform(0f, this.Height);
|
g.ScaleTransform(1f, -1f);
|
|
|
Rectangle rec = new Rectangle(0, 0, this.Width, this.Height);
|
|
//时针球 大小
|
|
int pr = PSize;
|
|
//Brush b = Brushes.Gray;
|
|
int r = (rec.Width - pr) / 2;
|
|
int rc = rec.Width / 2;
|
|
//计算 0 位置
|
|
Rectangle val0 = new Rectangle(rec.Width / 2 - pr / 2, rec.Height - pr, pr, pr);
|
Rectangle val25 = new Rectangle(rec.Width - pr, rec.Height / 2 - pr / 2, pr, pr);
|
Rectangle val50 = new Rectangle(rec.Width / 2 - pr / 2, 0, pr, pr);
|
Rectangle val75 = new Rectangle(0, rec.Height / 2 - pr / 2, pr, pr);
|
|
//计算45度位置的值
|
|
float l = (float)Math.Sqrt(r * r / 2);
|
|
RectangleF val12_5 = new RectangleF(rc + l - pr / 2, rc + l - pr / 2, pr, pr);
|
RectangleF val37_5 = new RectangleF(rc + l - pr / 2, rc - l - pr / 2, pr, pr);
|
RectangleF val62_5 = new RectangleF(rc - l - pr / 2, rc - l - pr / 2, pr, pr);
|
RectangleF val87_5 = new RectangleF(rc - l - pr / 2, rc + l - pr / 2, pr, pr);
|
|
g.FillEllipse(GetBrush(0), val0);
|
g.FillEllipse(GetBrush(25), val25);
|
g.FillEllipse(GetBrush(50), val50);
|
g.FillEllipse(GetBrush(75), val75);
|
g.FillEllipse(GetBrush(12.5), val12_5);
|
g.FillEllipse(GetBrush(37.5), val37_5);
|
g.FillEllipse(GetBrush(62.5), val62_5);
|
g.FillEllipse(GetBrush(87.5), val87_5);
|
}
|
|
private Brush GetBrush(double value)
|
{
|
if (value < Value)
|
return Brushes.Gray;
|
else
|
return Brushes.LightGray;
|
}
|
}
|
}
|