|
case WM_PAINT:
{
DrawWheel((g_iNobVal%361), 300, 430,50);
break;
}
case WM_TIMER:
{
WM_InvalidateArea(&rect);
}
void DrawWheel(int knobVal,int xoff,int yoff,int r)
{
int step;
int ArcStart = 360 - KNOB_STEP;
int ArcEnd = 360;
int i = 0;
step = knobVal / KNOB_STEP; //算出需要画内部弧形的个数
GUI_SetFont(&GUI_Font13B_ASCII);
GUI_AA_EnableHiRes(); //开高分辨率模式
GUI_AA_SetFactor(AA_FACT); //抗锯齿因子,关闭抗锯齿可减少卡顿
/*画圆环*/
GUI_SetPenSize(16); //使用弧线画环,可以调整画笔实现弧线粗细
GUI_SetColor(GUI_GRAY);
GUI_AA_DrawArc(xoff*AA_FACT, yoff*AA_FACT, r*AA_FACT, r*AA_FACT, 0, 360);
/*根据旋钮值画内部弧形*/
GUI_SetPenSize(16);
GUI_SetColor(GUI_BLUE);
for(; i<=step-1; i++)
{ //增大KNOB_STEP可减少画弧形的次数,可减少卡顿,但滑块变化精度变低
GUI_AA_DrawArc(xoff*AA_FACT, yoff*AA_FACT, r*AA_FACT, r*AA_FACT, ArcStart, ArcEnd);
ArcEnd = ArcStart; //上一个弧形的初角度成为下一个弧形的末角度
ArcStart = ArcStart - KNOB_STEP;//下一个弧形的初角度
}
GUI_AA_DisableHiRes();//关闭高分辨率
}
如上所示,200ms调用一下DrawWheel,实现环形进度条,这时候,操作UI会很卡,比如软键盘输入文字,DROPDOWN选择,会很卡。
如何优化?
|
|