如何把一组数组的数据用波形图或坐标点输出? 输入的数据存在一数组中,现在想把数组中的数据用波形图或是坐标点的形式输出,不知道该如何实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你什么环境呢?控制台程序?MFC ? SDK ?不管什么环境,首先要确定数据的显示速度啊,比如一个十字坐标轴,X轴表示时间,Y轴表示数值大小。利用绘图函数来绘制、连接这些点。 同意,主要用到:DC中的MoveTo()与LineTo() 环境是MFC,可以具体给我指导下吗? 是个端口程序,就是实现把采集进数组的数据实时动态的以点或线的形式显示出来环境是MFC,具体该如何做?小弟在此请教,谢谢啊能有实例的话更好 MoveTo()与LineTo() 我绘制资源管理器里CPU,MEM曲线,可参照,我的资源里有资源管理的原代码 http://download.csdn.net/source/628851void CMemUsgesCtl::DrawMemUsges(){ CDC memDC; CString strLable; CBitmap memBitmap; CBitmap* pOldBmp = NULL; CString strUsges; CPen BackFreePen; CPen BackUsedPen; CPen *pOldPen = NULL; CPen *pOldMemPen = NULL; CRect rectClient; CPaintDC dc(this); GetClientRect(&rectClient); m_iGridHeight = rectClient.Height() / m_iGridCount; //draw cpu free usges BackFreePen.CreatePen(PS_SOLID, m_iGridHeight - 2, m_FreeColor); memDC.CreateCompatibleDC(&dc); pOldMemPen = memDC.SelectObject(&BackFreePen); memBitmap.CreateCompatibleBitmap(&dc, rectClient.right, rectClient.bottom); pOldBmp = memDC.SelectObject(&memBitmap); for(int i = 0; i < 50 - (int)(m_ulNewUsges / 2); i ++) { memDC.MoveTo(rectClient.left + 12, rectClient.top + i * m_iGridHeight + 6); memDC.LineTo(rectClient.right - 12, rectClient.top + i * m_iGridHeight + 6); } //draw cpu used usges BackUsedPen.CreatePen(PS_SOLID, m_iGridHeight - 2, m_UsedColor); memDC.SelectObject(&BackUsedPen); for(int j = 0; j < (int)(m_ulNewUsges / 2); j ++) //fill used percent { memDC.MoveTo(rectClient.left + 12, rectClient.bottom - j * m_iGridHeight - 6); memDC.LineTo(rectClient.right - 12, rectClient.bottom - j * m_iGridHeight - 6); } //strLable = _T("memory"); memDC.SetBkMode(TRANSPARENT);//memDC.SetTextAlign(TA_LEFT);// memDC.SetTextColor(m_LableColor); //memDC.TextOut(rectClient.left + 10, rectClient.top + 20, strLable); strUsges.Format("%u", m_ulNewUsges); strUsges += "%"; memDC.SetTextAlign(TA_LEFT | TA_CENTER); memDC.SetTextColor(m_ForeFontColor); memDC.TextOut(rectClient.left + rectClient.Width() / 2 - 0, rectClient.bottom - 30, strUsges); dc.BitBlt(rectClient.left, rectClient.top, rectClient.right, rectClient.bottom, &memDC, 0, 0, SRCCOPY); memDC.SelectObject(pOldBmp); memDC.SelectObject(pOldMemPen); memDC.DeleteDC(); memBitmap.DeleteObject();} 主要是MoveTo()与LineTo() ,楼上好 我不直到你画图需要什么样的效果,如果绘制的曲线不需要像示波器一样移动,也不是实时的,赞同7楼的代码如果绘制曲线的数据量比较大,而且是实时的,建议将绘图部分分为几个函数来实现,首先是定义一个全局的位图(类成员变量)1、位图初始化函数;2、绘制坐标系函数;3、描点函数;4、在OnPaint里显示位图这样,12两个步骤只是在你重新绘制曲线的时候需要被调用,当接收到数据,只需要每次描点就可以了。如果需要像示波器一样能移动的就需要多定义几个位图了,然后通过位图透明运算,把位图组合起来 跨平台的 ftpclient库 1 动态改变属性页的大小 2 属性页的标签被点击的时候会发送什么消息 求助:这个问题怎么解决,伤脑筋 请问得到一个activeX之后,用什么方法可以看到activeX组件的内部信息? OCX控件不能正常下载注册 急急急,请问如何在SAX解释器中获得当前解析的XML文档的行数(即当前正在解析第几行)? 请求帮助 我开发一dll,问如何秘密的添加版本信息(急!) 各位大哥,哪儿有机械工业出版社出版的VISUAL C++5.0开发技术内幕下载呀? 什么是STL? 多段线之间的填充! 求一个去噪点的算法啊,,低通滤波器可以吗???
利用绘图函数来绘制、连接这些点。
DC中的
MoveTo()与LineTo()
能有实例的话更好
我绘制资源管理器里CPU,MEM曲线,可参照,
我的资源里有资源管理的原代码
http://download.csdn.net/source/628851
void CMemUsgesCtl::DrawMemUsges()
{
CDC memDC;
CString strLable;
CBitmap memBitmap;
CBitmap* pOldBmp = NULL;
CString strUsges;
CPen BackFreePen;
CPen BackUsedPen;
CPen *pOldPen = NULL;
CPen *pOldMemPen = NULL;
CRect rectClient; CPaintDC dc(this); GetClientRect(&rectClient);
m_iGridHeight = rectClient.Height() / m_iGridCount;
//draw cpu free usges
BackFreePen.CreatePen(PS_SOLID, m_iGridHeight - 2, m_FreeColor); memDC.CreateCompatibleDC(&dc);
pOldMemPen = memDC.SelectObject(&BackFreePen);
memBitmap.CreateCompatibleBitmap(&dc, rectClient.right, rectClient.bottom);
pOldBmp = memDC.SelectObject(&memBitmap); for(int i = 0; i < 50 - (int)(m_ulNewUsges / 2); i ++)
{
memDC.MoveTo(rectClient.left + 12, rectClient.top + i * m_iGridHeight + 6);
memDC.LineTo(rectClient.right - 12, rectClient.top + i * m_iGridHeight + 6);
} //draw cpu used usges
BackUsedPen.CreatePen(PS_SOLID, m_iGridHeight - 2, m_UsedColor);
memDC.SelectObject(&BackUsedPen); for(int j = 0; j < (int)(m_ulNewUsges / 2); j ++) //fill used percent
{
memDC.MoveTo(rectClient.left + 12, rectClient.bottom - j * m_iGridHeight - 6);
memDC.LineTo(rectClient.right - 12, rectClient.bottom - j * m_iGridHeight - 6);
} //strLable = _T("memory");
memDC.SetBkMode(TRANSPARENT);
//memDC.SetTextAlign(TA_LEFT);
// memDC.SetTextColor(m_LableColor);
//memDC.TextOut(rectClient.left + 10, rectClient.top + 20, strLable); strUsges.Format("%u", m_ulNewUsges);
strUsges += "%";
memDC.SetTextAlign(TA_LEFT | TA_CENTER);
memDC.SetTextColor(m_ForeFontColor);
memDC.TextOut(rectClient.left + rectClient.Width() / 2 - 0, rectClient.bottom - 30, strUsges);
dc.BitBlt(rectClient.left, rectClient.top, rectClient.right, rectClient.bottom,
&memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBmp);
memDC.SelectObject(pOldMemPen);
memDC.DeleteDC();
memBitmap.DeleteObject();
}
如果绘制曲线的数据量比较大,而且是实时的,建议将绘图部分分为几个函数来实现,首先是定义一个全局的位图(类成员变量)
1、位图初始化函数;
2、绘制坐标系函数;
3、描点函数;
4、在OnPaint里显示位图
这样,12两个步骤只是在你重新绘制曲线的时候需要被调用,当接收到数据,只需要每次描点就可以了。如果需要像示波器一样能移动的
就需要多定义几个位图了,然后通过位图透明运算,把位图组合起来