GDI+ FAQ: How to draw a rounded rectangle
The 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)
{
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);
gp.Dispose(); } |
|
|
[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) Dim gp As
GraphicsPath = 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) gp.Dispose() End Function
Back to the GDI+
FAQ
|