
How to draw a rounded rectangleThe trick here is to use a GraphicsPath object to assemble a collection of lines and arcs that make up the rounded rectangle shape. Arcs are used to round off the corners, so you have to position the lines 1 radius, whatever that may be, from the actual corner. The routine to accomplish this is shown here in C# and VB.NET. [C#] public void DrawRoundRect(Graphics g, Pen p, float X, float Y, float width, float height, float radius){ GraphicsPath gp=new GraphicsPath(); gp.AddLine(X + radius, Y, X + width - (radius*2), Y); gp.AddArc(X + width - (radius*2), Y, radius*2, radius*2, 270, 90); gp.AddLine(X + width, Y + radius, X + width, Y + height - (radius*2)); gp.AddArc(X + width - (radius*2), Y + height - (radius*2), radius*2, radius*2,0,90); gp.AddLine(X + width - (radius*2), Y + height, X + radius, Y + height); gp.AddArc(X, Y + height - (radius*2), radius*2, radius*2, 90, 90); gp.AddLine(X, Y + height - (radius*2), X, Y + radius); gp.AddArc(X, Y, radius*2, radius*2, 180, 90); gp.CloseFigure();
g.DrawPath(p,
gp);
[VB] Public Function DrawRoundRect(ByVal g As
Graphics, ByVal p As Pen, ByVal x As Single, ByVal y As Single, ByVal width As
Single, ByVal height As Single, ByVal radius As Single) gp.AddLine(X + radius, Y, X + width - (radius*2), Y); gp.AddArc(X + width - (radius*2), Y, radius*2, radius*2, 270, 90); gp.AddLine(X + width, Y + radius, X + width, Y + height - (radius*2)); gp.AddArc(X + width - (radius*2), Y + height - (radius*2), radius*2, radius*2,0,90); gp.AddLine(X + width - (radius*2), Y + height, X + radius, Y + height); gp.AddArc(X, Y + height - (radius*2), radius*2, radius*2, 90, 90); gp.AddLine(X, Y + height - (radius*2), X, Y + radius); gp.AddArc(X, Y, radius*2, radius*2, 180, 90);
Copyright © 2003 Robert W. Powell. All rights
reserved. |