如上图,我自己画的类似控件的一个波形图,可以多个并存,每个波形图都有一个线程在内存中画图,然后UI以固定频率从内存复制出来显示。
可以看出第一个波形图,LINE4和SIN3 有一条的异常线,但是我的每条线数据是独立的不可能相交,相应代码如下,请各位大佬给予指点。
for (int i = 0; i < showLine.size(); i++)
{
string line_name = showLine[i];
//判定是否画完,画完则退出,重新进入遍历
if (mPointsIndex[line_name] >= mPoints[line_name].size() - 1)
{
showLine.erase(showLine.begin() + i);
break;
}
//线的点位进行归一化
MemCDCWaveform.SelectObject(&mPointsColor[line_name]);
POINTF PointF1 = mPoints[line_name][mPointsIndex[line_name]];
POINTF PointF2 = mPoints[line_name][mPointsIndex[line_name] + 1];
POINT Point1 = NormalizationPoint(PointF1);
POINT Point2 = NormalizationPoint(PointF2);
//判定是否相同点位,相同点位不画
if (Point1.x == Point2.x && Point1.y == Point2.y)
{
mPointsIndex[line_name] ++;
}
else
{
//线程中划线有失败几率,一定要进行判定
if (MoveToEx(MemCDCWaveform, Point1.x, Point1.y, NULL) && LineTo(MemCDCWaveform, Point2.x, Point2.y))
{
mPointsIndex[line_name] ++;
}
}
}