实时波形显示界面
通常计算机需要接收外部实时发送的数据并用十分形象的方式显示出来。例如柱状图、饼图等等。本应用程序则采用波形的形式显示,并接将之设计为可以接收多路数据的波形显示界面。本应用程序在VS2008环境下调试通过。如果需要源码,请联系我,QQ:726921679,E-mail:onlymydreams@一.程序界面
点击该图放大
上图中显示了两路波形即三角波和正弦波,当然这两路波形是由程序计算出来的并不是从外部接收的。实际工作中则可以配合串口通讯设备接收它发来的数据并显示出来。
二.波形控件类介绍
本程序的实现主要依赖于那个波形显示控件。从下载连接那里可以下载该源码,里面的文件中,2DPushGraph.h和2DPushGraph.cpp即是该控件的类的定义文件和实现文件。分析之后得到该类的一些信息。
其成员函数包括:
程序代码:
COLORREF m_crTextColor;//标签文字颜色 COLORREF m_crBGColor;//背景颜色 COLORREF m_crGridColor;//栅格颜色 CString m_strMaxLabel;//最大值之处的标签 CString m_strMinLabel;//最小值之处的标签 bool m_bShowMinMax;//最小最大值显示 bool m_bShowGrid;//是否显示栅格 bool m_bStylesModified;//是否被修改 int m_nMoveOffset;//偏移 int m_nMaxCoords;//最大缓冲 int m_nMaxPeek;//显示数据的最大值 int m_nMinPeek;//显示数据的最小值 int m_nGridSize;//栅格间距 int m_nPeekOffset;//峰值偏移其实现方法包括:
程序代码:
bool CreateFromStatic( UINT nStaticID, CWnd* pParent );//该方法用于创建控件实例,通常在对话框初始化函数中调用,nStaticID为控件ID,pPatent为创建在那个窗口中的ID。 LPCTSTR GetLabelForMax() const;//获取最大值处的标签 LPCTSTR GetLabelForMin() const; //获取最大值处的标签 COLORREF GetBGColor() const;//获得背景色 COLORREF GetGridColor() const;//获得栅格颜色 void SetBGColor(COLORREF crColor); void SetGridColor(COLORREF crColor); void SetTextColor(COLORREF crColor); COLORREF GetLineColor( UINT uiLineID );//该方法用于获得ID号为uiLineID的波形的线条颜色,因为要在波形控件中画线必须先调用bool AddLine( UINT uiLineID, COLORREF crColor );创建一个波形,ID号为uiLineID。 bool SetLineColor( COLORREF crColor, UINT uiLineID ); COLORREF GetTextColor() const;//获得标签文本的颜色 int GetGridSize() const;//获得栅格间隔 void SetGridSize( unsigned short usWidthAndHeight ); int GetMaxPeek() const;//获得最大值纵坐标 int GetMinPeek() const; //获得最小值纵坐标 void SetPeekRange(int nMin, int nMax); void SetMaxPeek(int nMax); void SetMinPeek(int nMin); unsigned short GetInterval() const; //获得横坐标间距 void SetInterval( unsigned short usInterval ); void SetLabelForMax( LPCTSTR lpszLabel ); void SetLabelForMin( LPCTSTR lpszLabel ); bool AddLine( UINT uiLineID, COLORREF crColor );//该方法用于在该控件上创建一个波形。 void RemoveLine( UINT uiLineID );//清除ID号为uiLineID的波形 bool Push( int nMagnitude, UINT uiLineID );//在ID号为uiLineID号的波形上添加一个数据点,nMagnitude为幅度 void ShowAsBar( UINT uiLineID, bool bAsBar );//柱状图显示 void Update();//更新
三.应用编程
运用该控件在VS2008环境下的编程步骤如下:
1.建立一个对话框的MFC工程,在对话框上按照上图所示的界面布置控件。其中波形控件那里布置一个Picture Control控件将其Modal Frame和Type均属性设置为true,其他均设置为False。注意给Picture Control取的ID!后面编程将会用到。
2.将波形控件类的定义文件和实现文件拷贝至你的工程目录下。但这实际上并没有将该类真正添加到你的工程下,需手动添加类。常规操作,不详述。
3.在对话框的定义和实现文件中分别添加如下代码:
#include "2DPushGraph.h"
4.在对话框定义文件中(我给的供下载的例程中的是DataRealTimeDlg.h这个文件)中定义一个该控件类的变量:
private: C2DPushGraph m_PushGraph;
5.在对话框的实现文件中(我给的供下载的例程中的是DataRealTimeDlg.cpp这个文件)的对话框初始化函数中添加如下代码:
m_PushGraph.CreateFromStatic(IDC_REALCTRL, this); //这个IDC_REALCTRL即是那个Picture Control控件的ID号。 m_PushGraph.ModifyStyle(0, WS_THICKFRAME); //设置风格
6.现在不妨试着运行以下该程序,应该可以观察到那个控件显示出来了吧。在添加以下代码:
m_PushGraph.AddLine(m_sin, RGB(255,255,255)); m_PushGraph.AddLine(m_tra, RGB(255,0,0))这两行代码分别添加了一个正弦波形,ID号为m_sin,一个三角波形,ID号为m_tra。不过运行之后并没有数据点绘制出来。那是应为还没有调用bool Push( int nMagnitude, UINT uiLineID )函数添加数据点。试着添加几个数据点再运行即可观察到波形。
7.还有一些控件的响应代码看看那个下载的例程吧。
四.结束语
成功了吧,Any Problem,Contact me please!
注意!!!!这边帖子的源代码作者已经删除了,如果需要可以看一下作者写的类似的帖子,那些源码还在。
https://bbs.bccn.net/thread-367512-1-1.html
https://bbs.bccn.net/thread-363860-1-1.html
[ 本帖最后由 hlmzrdongdong 于 2012-10-28 13:11 编辑 ]