VC用MFC开发的圆形进度条控件
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:文字顏色。
總結
以上是生活随笔為你收集整理的VC用MFC开发的圆形进度条控件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 绘制颜色渐变矩形函数
- 下一篇: VC动态数组实现