winform圆角窗体绘制

1、窗口的FormBorderStyle属性设置为None。

2、在窗体Paint事件中调用函数:

public static void RoundFormPainter(object sender, PaintEventArgs e)
{
  Form form = ((Form)sender);
  List<Point> list = new List<Point>();
  int width = form.Width;
  int height = form.Height;

  //左上
  list.Add(new Point(0, 5));
  list.Add(new Point(1, 5));
  list.Add(new Point(1, 3));
  list.Add(new Point(2, 3));
  list.Add(new Point(2, 2));
  list.Add(new Point(3, 2));
  list.Add(new Point(3, 1));
  list.Add(new Point(5, 1));
  list.Add(new Point(5, 0));


  //右上
  list.Add(new Point(width - 5, 0));
  list.Add(new Point(width - 5, 1));
  list.Add(new Point(width - 3, 1));
  list.Add(new Point(width - 3, 2));
  list.Add(new Point(width - 2, 2));
  list.Add(new Point(width - 2, 3));
  list.Add(new Point(width - 1, 3));
  list.Add(new Point(width - 1, 5));
  list.Add(new Point(width - 0, 5));


  //右下
  list.Add(new Point(width - 0, height - 5));
  list.Add(new Point(width - 1, height - 5));
  list.Add(new Point(width - 1, height - 3));
  list.Add(new Point(width - 2, height - 3));
  list.Add(new Point(width - 2, height - 2));
  list.Add(new Point(width - 3, height - 2));
  list.Add(new Point(width - 3, height - 1));
  list.Add(new Point(width - 5, height - 1));
  list.Add(new Point(width - 5, height - 0));


  //左下
  list.Add(new Point(5, height - 0));
  list.Add(new Point(5, height - 1));
  list.Add(new Point(3, height - 1));
  list.Add(new Point(3, height - 2));
  list.Add(new Point(2, height - 2));
  list.Add(new Point(2, height - 3));
  list.Add(new Point(1, height - 3));
  list.Add(new Point(1, height - 5));
  list.Add(new Point(0, height - 5));

  Point[] points = list.ToArray();

  GraphicsPath shape = new GraphicsPath();
  shape.AddPolygon(points);

  //将窗体的显示区域设为GraphicsPath的实例
  form.Region = new System.Drawing.Region(shape);
}

posted @ 2017-11-29 09:42  都是城市惹的祸  阅读(160)  评论(0)    收藏  举报