您的位置:首页 > 其它

VC用MFC开发的圆形进度条控件

2017-07-25 12:21 2021 查看
DownLoad Src
VC用MFC开发的圆形进度条控件
visualsan@yahoo.cn NUAA zss
在NBA2007游戏里,还有很多科幻电影里,经常可以看到圆形进度条。有的用来显示导弹发射的准备时间,有的用来倒计时。如图所示。模仿该样式,用MFC实现了一个Activex控件。叙述如下:



该控件的编写思路是:
    根据当前值,计算圆弧角度,然后用CShape(一个图形绘制类)绘制扇形,对于连续圆弧则可以一次绘制,而对于间断圆弧,则须根据分段数分别计算角度,然后在分别填充。代码如下:
void CCircleProgressCtrl::Draw1(CDC *pDC,CRect rt,double r1,double r2)

{

 POINT pt=rt.CenterPoint();

 m_shape.DrawConeGradientSideToSide(pDC,pt,r1,r2,360.0-GetAngle(),GetAngle()-
 m_startAngle,startfgcolor,endfgcolor);

}
void CCircleProgressCtrl::Draw2(CDC *pDC,CRect rt,double r1,double r2)

{

 POINT pt=rt.CenterPoint();

 double st;

 int i;

 int d=GetAngle()/angPerSubs;

 for (i=0;i<d;i++)

 {

  st=angPerSubs*double(i)+m_startAngle;

  m_shape.DrawConeGradientSideToSide(pDC,pt,r1,r2,306.0-st,angPerSubs-
  m_dsubs,startfgcolor,endfgcolor);

 }
}

void CCircleProgressCtrl::Draw3(CDC *pDC,CRect rt,double r1,double r2)

{

 POINT pt=rt.CenterPoint();

 double st;

 int d=GetAngle()/angPerSubs;

 {

 for (int i=0;i<d;i++)

 {

  st=angPerSubs*double(i)+m_startAngle;

  m_shape.DrawConeGradientSideToSide(pDC,pt,r1,r2,306.0-st,angPerSubs-
  m_dsubs,startfgcolor,endfgcolor);

 }

 double la=GetAngle()-double(d)*angPerSubs;

 if(la>m_dsubs)

     m_shape.DrawConeGradientSideToSide(pDC,pt,r1,r2,306.0-st-m_dsubs,-
     la+m_dsubs,startfgcolor,endfgcolor);

 }
}
运行情况如下:



visualsan@yahoo.cn  NUAA ZSS 2009.9.24



 
控件主要属性如下:



style:样式,其值为0,1,2 。0,1表示绘制间断扇形,2表
      示绘制连续扇形。
dot:小数点位数
division:扇形段数
CurrentValue:当前值,若大于最大值,则扇形绘制整园,若
      小于最小值,则不绘制扇形。
unit:单位,用于输出显示,可以选择不输出。
maxValue,minValue:最大值,最小值。
startAngle:起始角。
bkcolor:背景颜色
colorBegin:扇形渐变颜色其实值。
colorEnd:扇形渐变颜色终止值。
textColor:文字颜色。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐