MFC

void CCurvesView::OnDraw(CDC* pDC)
{
   // Fill the client area with a simple pie chart. A
   // big blue slice covers 75% of the pie, from
   // 6 o'clock to 3 o'clock. This portion is filled
   // with blue and has a blue edge. The remaining 25%
   // is filled with a red, diagonal hatch and has
   // a red edge.

   // Get the client area.
   CRect rectClient;
   GetClientRect(rectClient);

   // Make a couple of pens and similar brushes.
   CPen penBlue, penRed;
   CBrush brushBlue, brushRed;
   CBrush* pOldBrush;
   CPen* pOldPen;

   brushBlue.CreateSolidBrush(RGB(0, 0, 255));
   brushRed.CreateHatchBrush(HS_FDIAGONAL, RGB(255, 0, 0));
   penBlue.CreatePen(PS_SOLID | PS_COSMETIC, 1, RGB(0, 0, 255));
   penRed.CreatePen(PS_SOLID | PS_COSMETIC, 1, RGB(255, 0, 0));

   // Draw from 3 o'clock to 6 o'clock, counterclockwise,
   // in a blue pen with a solid blue fill.

   pOldPen = pDC->SelectObject(&penBlue);
   pOldBrush = pDC->SelectObject(&brushBlue);

   pDC->Pie(rectClient,
      CPoint(rectClient.right, rectClient.CenterPoint().y),
      CPoint(rectClient.CenterPoint().x, rectClient.right));

   // Draw the remaining quarter slice from 6 o'clock
   // to 3 o'clock, counterclockwise, in a red pen with
   // the hatched brush.
   pDC->SelectObject(&penRed);
   pDC->SelectObject(&brushRed);

   // Same parameters, but reverse start and end points.
   pDC->Pie(rectClient,
      CPoint(rectClient.CenterPoint().x, rectClient.right),
      CPoint(rectClient.right, rectClient.CenterPoint().y));

   // Restore the previous pen.
   pDC->SelectObject(pOldPen);

}


/*---design by whb in 2009-8-16---
_radius:半径;_fontSize:字体的大小
用于画一个扇形统计图;
*/
package maths{
 import Flash.display.Sprite;
 import flash.text.TextField;
 import flash.text.TextFieldAutoSize;
 import flash.text.TextFormat;
 import flash.events.MouseEvent;
 public class Pie extends Sprite {
  private var colors:Array=[0x000000,0xff0000,0x00ff00,0x0000ff,0xffff00,0x00ffff,0xff00ff,0x999900,0x009900,0x9999ff];
  private var radius:Number;
  private var pies:Array=[];
  private var txts:Array=[];
  private var angles:Array=[];
  private var rects:Array=[];
  private var datas:Array=[];
  private var labels:Array=[];
  private var txtFormat:TextFormat;
  private var pie:Sprite;
  private var rect:Sprite;
  private var txt:TextField;
  public function Pie(_radius:Number=40,_fontSize:uint=15) {
   radius=_radius;
   txtFormat=new TextFormat();
   txtFormat.size=_fontSize;
  }
  public function drawPies(_array:Array) {
   for each(var obj  in _array){
    datas.push(obj.data);
    labels.push(obj.label);
    } 
   //计算圆心角:
   var sumAngle:Number=0;
   for each (var angle in datas) {
    sumAngle+=angle;
   }
   for each (var a in datas) {
    angles.push((a/sumAngle)*2*Math.PI);
   }
   //画扇形图:
   for(var i:uint=0;i<datas.length;i++){;
   pie=new Sprite();
   pie.graphics.lineStyle(1,0);
   pie.graphics.beginFill(colors[i%colors.length]);
   pie.graphics.moveTo(0,0);
   sumAngle=0;
   for(var j:uint=0;j<i;j++){;
   sumAngle+=angles[j];
  }
  pie.graphics.lineTo(radius*Math.cos(sumAngle),radius*Math.sin(sumAngle));
  for(var angle1:Number=0;angle1<angles[i]+0.05;angle1+=0.05){;
  pie.graphics.lineTo(radius*Math.cos(angle1+sumAngle),radius*Math.sin(angle1+sumAngle));
 }
 pie.graphics.lineTo(0,0);
 pie.addEventListener(flash.events.MouseEvent.MOUSE_OVER,mouseOnPie);
 pie.addEventListener(flash.events.MouseEvent.MOUSE_OUT,mouseOutPie);
 addChild(pie);
 pie.alpha=0.5;
 pies.push(pie);
 drawRects(i);
}
}//end of function drawPies
private function drawRects(num:uint) {
var rowNum:uint=num%4;
var listNum:uint=uint(num/4);
rect=new Sprite();
rect.graphics.lineStyle(1,0);
rect.graphics.beginFill(colors[num%colors.length]);
rect.graphics.drawRect(0,0,20,20);
rect.graphics.endFill();
addChild(rect);
rect.x=radius+40+listNum*70;
rect.y=-(radius+10)+rowNum*(20+5);
rect.alpha=0.5;
rect.addEventListener(flash.events.MouseEvent.MOUSE_OVER,mouseOnRect);
rect.addEventListener(flash.events.MouseEvent.MOUSE_OUT,mouseOutRect);
//
txt=new TextField();
txt.defaultTextFormat=txtFormat;
txt.text=labels[num]+": "+String(Math.round(1000*angles[num]/(2*Math.PI))/10)+"%";
txt.autoSize=flash.text.TextFieldAutoSize.LEFT;
txt.x=22;
txt.mouseEnabled=false;
rect.addChild(txt);
txts.push(txt);
rects.push(rect);
}//end of drawRects
private var index:Number;
private function mouseOnRect(e:MouseEvent) {
((e.target).getChildAt(0)).border=true;
e.target.alpha=1;
index=rects.indexOf(e.target);
pies[index].alpha=1;
}//end of mouseOnPie
private function mouseOutRect(e:MouseEvent) {
e.target.alpha=0.5;
for each(var t in txts){
 t.border=false;}
for each(var p in pies){
 p.alpha=0.5;}
}//end of mouseoutPie
private function mouseOnPie(e:MouseEvent) {
e.target.alpha=1;
index=pies.indexOf(e.target);
rects[index].alpha=1;
rects[index].getChildAt(0).border=true;
}//end of mouseOnPie
private function mouseOutPie(e:MouseEvent) {
e.target.alpha=0.5;
for each(var t in txts){
 t.border=false;}
for each (var rectangle in rects) {
 rectangle.alpha=0.5;
}
}//end of mouseoutPie
}//end of class 
}//end of package
//
import maths.Pie;
var a:Pie=new Pie();
a.drawPies([{label:"数学",data:2},{label:"语文",data:3},{label:"英语",data:4},{label:"物理",data:2}]);
addChild(a);
a.x=a.y=100;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值