Ich möchte meine benutzerdefinierte kreisförmige Fortschrittsanzeige in WinForm. Aber das Ergebnis passt nicht zu dem, was ich denke. Wie kann ich in diesem Bild die gleiche Form zeichnen? Ich habe zwei Bilder hochgeladen, um mein Problem zu verdeutlichen.Wie zeichne eine kreisförmige Fortschrittsbalken Torte mit GraphicsPath in WinForm?
Mein Code, dies zu tun:
void Form1_Paint(object sender, PaintEventArgs e)
{
int angle = 120;
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
Rectangle outerRect = new Rectangle(50, 50, 100, 100);
Rectangle innerRect = new Rectangle(70, 70, 60, 60);
int innerRadius = innerRect.Width/2;
int outerRadius = outerRect.Width/2;
Point innerCenter = new Point(innerRect.X + innerRadius, innerRect.Y + innerRadius);
Point outerCenter = new Point(outerRect.X + outerRadius, outerRect.Y + outerRadius);
GraphicsPath outerCircle = new GraphicsPath();
outerCircle.AddEllipse(outerRect);
GraphicsPath innerCircle = new GraphicsPath();
innerCircle.AddEllipse(innerRect);
GraphicsPath progPath = new GraphicsPath();
Point p1 = new Point(outerRect.X + outerRadius, outerRect.Y);
Point p2 = new Point(innerRect.X + innerRadius, innerRect.Y);
Point inner = new Point((int)(innerRadius * Math.Cos(angle * Math.PI/180) + innerCenter.X),
(int)(innerRadius * Math.Sin(angle * Math.PI/180) + innerCenter.Y));
Point outer = new Point((int)(outerRadius * Math.Cos(angle * Math.PI/180) + outerCenter.X),
(int)(outerRadius * Math.Sin(angle * Math.PI/180) + outerCenter.Y));
progPath.AddLine(p1, p2);
progPath.AddArc(innerRect, -90, angle);
progPath.AddLine(inner, outer);
progPath.AddArc(outerRect, angle - 90,-angle);
progPath.Widen(Pens.Black);
e.Graphics.DrawPath(Pens.Black, progPath);
}
Dank @Reza. Dieser Weg ist einfacher als meine Methode. –