当前位置:嗨网首页>书籍在线阅读

11-绘制扇形和弧线

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

20.2.5 绘制扇形和弧线

怎么在C#中绘制扇形呢?就是用FillPie()方法。FillPie方法的语法格式如下。

public void DrawPie(Pen pen,int x,int y,int width,int height,float startAngle,float sweepAngle);

该方法参数中,pen表示画线所用的画笔,它决定了线条的颜色、宽度和样式;x和y表示扇形所对应的椭圆外接矩形的左上角坐标,width和height是外接矩形的宽度和高度;startAngle为起始角度(以顺时针度数为单位),sweepAngle为扇形所扫过的角度。同样,上面方法中的坐标、宽度和高度可以用一个Rectangle结构对象表示,方法的语法形式如下如示。

public void DrawPie(Pen pen,Rectangle rect,float startAngle,float sweepAngle);

假如你这学期的课程有高等数学、大学英语、C#程序设计和电影欣赏四门课,如下图所示的饼图是你在这四门课上所花费的时间比例。

349.png 程序源代码如下。

01  private void Form6_Paint(object sender, PaintEventArgs e)
02  {
03          Graphics g = e.Graphics;
04          Rectangle rect = new Rectangle(70, 30, 300, 300);
05          Rectangle r = new Rectangle(20, 280, 20, 20);
06          Point p = new Point(50,285);
07          String[] courses = { "高等数学","大学英语","C#程序设计","电影欣赏"};
08          float[] times = {80,90,30,160};
09          float start = 0;
10          Random rnd = new Random();
11          SolidBrush brush = new SolidBrush(Color.Black);
12          for (int i = 0; i < courses.Length; i++)
13          {
14                  Color c = Color.FromArgb(rnd.Next(256), rnd.Next(256), rnd.Next(256));
15                  SolidBrush brush1 = new SolidBrush(c);
16                  float sweep = times[i];
17                  g.FillPie(brush1, rect, start, sweep);
18                  g.FillRectangle(brush1, r);
19                  g.DrawString(courses[i], this.Font, brush, p);
20                  start += sweep;
21                  r.Y += 20;
22                  p.Y += 20;
23          }
24  }

绘制弧线相当于绘制扇形的外边界,绘制弧线的方法是DrawArc,这个方法的参数和绘制扇形的方法参数一致,该方法的语法如下。

Graphics.DrawArc(Pen pen, int x, int y, int width, int height, int startAngle,int sweepAngle)

该方法参数中,pen表示画线所用的画笔,它决定了线条的颜色、宽度和样式;x和y表示弧线所对应椭圆外接矩形的左上角坐标,width和height是外接矩形的宽度和高度;startAngle为起始角度(以顺时针度数为单位),sweepAngle为弧线所扫过的角度。同样,上面方法中的坐标、宽度和高度可以用一个Rectangle结构对象表示,方法的语法形式如下如示。

public void DrawArc(Pen pen,Rectangle rect,float startAngle,float sweepAngle);