RoundRect

C# Signature:

[DllImport("gdi32.dll")]
static extern bool RoundRect(IntPtr hdc, int nLeftRect, int nTopRect,
   int nRightRect, int nBottomRect, int nWidth, int nHeight);

Sample Code:

public class GDI32
{
    #region GDI32 Functions
    [DllImport("gdi32.dll")]
    public static extern bool RoundRect(RECT lpRect, Point point); 

    [DllImport("gdi32.dll")]
    public static extern bool RoundRect(IntPtr hdc, int nLeftRect, int nTopRect,
    int nRightRect, int nBottomRect, int nWidth, int nHeight);

    [DllImport("gdi32.dll")]
    public static extern IntPtr CreateSolidBrush(uint crColor);

    [DllImport("gdi32.dll")]
    public static extern IntPtr CreatePen(int fnPenStyle, int nWidth, uint crColor);

    [DllImport("gdi32.dll")]
    public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hgdiobj);

    [DllImport("gdi32.dll")]
    public static extern bool DeleteObject(IntPtr hObject);

    public static int RGB(Color color)
    {
        return color.ToArgb() & 0xffffff;
    }

    #endregion
}

public class RoundControl : System.Windows.Forms.Control
{
    protected override void OnPaint(PaintEventArgs e)
    {
        DrawRoundRect(e.Graphics);
    }

    public void DrawRoundRect(Graphics gr)
    {            
        RECT rect = new RECT(0, 0, this.Width, this.Height);
        IntPtr hDC = gr.GetHdc();
        IntPtr thePen = GDI32.CreatePen(0, 1, (uint)GDI32.RGB(Color.White));
        IntPtr theBrush = GDI32.CreateSolidBrush((uint)GDI32.RGB(Color.White));
        IntPtr oldPen = GDI32.SelectObject(hDC, thePen);
        IntPtr oldBrush = GDI32.SelectObject(hDC, theBrush);        

        GDI32.RoundRect(hDC, 0, 0, this.Width, this.Height, 20, 20);

        GDI32.SelectObject(hDC, oldPen);
        GDI32.DeleteObject(thePen);
        GDI32.SelectObject(hDC, oldBrush);            
        GDI32.DeleteObject(theBrush);

        gr.ReleaseHdc(hDC);            
    }
}

Última actualización