您的位置:首页 > 编程语言 > C语言/C++

Visual C++如何动态画曲线使其闪动率降到最低

2010-12-03 21:08 417 查看
在Visual C++中的编程中,我们经常用到一些图表的绘制,尤其是在工业控制软件或工业产吕标定软件中,如对设备运行轨迹的仿真及其对其及运行中的各项参数实时的用曲线显示,通过曲线表现出来的状态对设备的运行状态进行分析,然后对其标定和调整。在刚刚学习编程的时候,首先想的用一些图表控件,其中应用最为广泛的多为MSChart和OfficeChart其功能封装的非常多,通过简单的操作可以画出非常漂亮的曲线或其它类型的图,但是正是由于其封装了太多的功能,使用其来非常之不灵活,如MSChart功能非常强,如果我们想让坐标轴动起来,非常之困难,更糟糕的是当屏目刷新频率很快时,屏幕非常的闪的,用户体验性非常差,其实最简单不如自已一笔笔的画,那样更灵活,可以实现自已的许多的功能,如多数据轴坐标体系,曲线的缩放,或相位移动,最近做了一个工业控制软件,自已经过研习前人的方法,自已动手写了一个,核心代码如下:

void CCSBAppView::DrawGraph()
{
CWnd* pWnd=this->GetDlgItem(IDC_STATIC_GRAPH);
CDC* pDC=pWnd->GetDC();
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(40000000,-10000000);
pDC->SetViewportExt(800,-200);
pDC->SetViewportOrg(0,0);

CGdiObject* pOldBrush=pDC->SelectObject(pBkBrush);
pDC->Rectangle(CRect(0,0,40000000,10000000));
pDC->SelectObject(pOldBrush);
CGdiObject* pOldPen=pDC->SelectObject(pGridPen);
pDC->SetBkColor(RGB(0,0,0));
static int count_T=0;
for(int i=0;i<=80;i+=5)
{
if(40000000-50000*(i+count_T)>=0)
{
pDC->MoveTo(40000000-500000*(i+count_T),0);
pDC->LineTo(40000000-500000*(i+count_T),10000000);

}
}
pDC->SelectObject(pOldPen);
count_T++;
if(count_T==5) count_T=0;

for(i=0;i<=20;i++)//画横坐标
{
pOldPen=pDC->SelectObject(pGridPen);
pDC->SetBkColor(RGB(0,0,0));
pDC->MoveTo(0,i*500000);
pDC->LineTo(40000000,i*500000);
pDC->SelectObject(pOldPen);
}
CString str;
pLinePoints++;
i f(this->m_bslsj==TRUE)
{
pOldPen=pDC->SelectObject(pLinePen1);
pDC->Polyline(polyLine[0],81);
pDC->SelectObject(pOldPen);
}
if(this->m_bnlsj==TRUE)
{
pOldPen=pDC->SelectObject(pLinePen2);
pDC->Polyline(polyLine[1],81);
pDC->SelectObject(pOldPen);
}
i f(this->m_bsjcz==TRUE)
{
pOldPen=pDC->SelectObject(pLinePen3);
pDC->Polyline(polyLine[2],81);
pDC->SelectObject(pOldPen);
}
if(this->m_bwd==TRUE)
{
pOldPen=pDC->SelectObject(pLinePen4);
pDC->Polyline(polyLine[3],81);
pDC->SelectObject(pOldPen);
}

if(pLinePoints<81)//将前面一直在坐标轴上的点用北景色压掉
{
pOldPen=pDC->SelectObject(pBkPen);
pDC->Polyline(polyLine[0],80-pLinePoints+2);
pDC->SelectObject(pOldPen);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: