|
发表于 2023-3-12 00:45:02
|
显示全部楼层
最近我也在看这个。确实复杂。上面的_MoveNeedle就是为演示设计的。下面是我修改,根据输入参数,调整指针位置的函数
void _MoveNeedle(NEEDLE* pObj, int Index,int displaments)
{
GUI_RECT rOld;
GUI_RECT rNew;
if (pObj->NeedleUPM)
{
_GetNeedleRect(&_Scale[Index], Index, &rOld);
//NEEDLE_GRAD - 表盘最大数值
//pObj->NeedlePos - 指针要指向的刻度
//400 - 输入变量displaments最大值
pObj->NeedlePos = displaments*NEEDLE_GRAD/400;
if (pObj->NeedlePos > NEEDLE_GRAD)
{
pObj->NeedlePos = NEEDLE_GRAD; //超过最大值,置最大值
}
else
{
if (pObj->NeedlePos < 0)
{
pObj->NeedlePos = 0; //移动值小于0,置0
}
}
_GetNeedleRect(&_Scale[Index], Index, &rNew);
_MergeRects(&rNew, &rOld);
WM_InvalidateRect(_Scale[Index].hWin, &rNew);
}
}
我有个不明白划分不同颜色区域的四个参数
int ArcStart;
int ArcEnd;
int ArcArea1;
int ArcArea2;
ArcStart、ArcEnd是角度值,ArcArea1、ArcArea2是如何设置的。硬汉例子中设置为257、311,在ArcStart(59)、ArcEnd(225)之外,理解不了
楼主清楚吗?请解释一下 |
|