昨天上网意外发现一个很好的图像显示控件,以前做上位机,对实时图像数据的显示没有很好的解决方案,真是踏破铁鞋无觅处,得来全不费功夫!很是兴奋!
具体控件使用方法:
首先注册控件:regsvr32 NTGraph.ocx
regsvr32 /u NTGraph.ocx//反注册控件
然后建立VC工程,插入上述控件!这样你会看到你的工程中多了三个类;
然后在对话框初始化函数中初始化控件,方法如下:
m_Graph.SetElementLineColor(RGB(125,255,0));
m_Graph.SetElementLineColor(RGB(255,255,0));
m_Graph.SetElementIdentify(FALSE);
m_Graph.SetShowGrid(TRUE);
m_Graph.SetXGridNumber(10);//设置X轴等分点数,即网格宽度(注意和函数SetRange()的关系)
m_Graph.SetYGridNumber(10);//设置Y轴等分点数
m_Graph.SetCaption("Test Graph Control");//设置标题
m_Graph.SetXLabel("X轴");//设置横轴名称
m_Graph.SetYLabel("Y轴");//设置纵轴名称
m_Graph.SetRange (0,500,-50,50);//设置横轴和纵轴的范围,前两位是横轴,后两位是纵轴
m_Graph.AddElement(); //再加一个曲线
this->SetTimer(1,10,NULL) ;//利用定时器产生实时数据
然后在定时器中显示图像,程序如下:
this->m_Graph.ClearGraph() ;
m_Graph.SetElementLineColor(RGB(0,255,0));
this->m_Graph.AddElement() ;
m_Graph.SetElementLineColor(RGB(225,255,0));
this->AddData(this->data,20*cos(temp)) ;
this->AddData(this->data1,30*rand()*sin(temp)/65535) ;
temp=temp+0.1 ;
for(int i=0;i<500;i++)
{
this->m_Graph.PlotXY(i,this->data[i],0) ;
this->m_Graph.PlotXY(i,this->data1[i],1) ;
}
这样就OK了,很简单吧!
于是就用VC编了一个实验程序,效果如下: