注册 登录
编程论坛 VC++/MFC

实时波形显示界面

hlmzrdongdong 发布于 2009-11-11 10:12, 19495 次点击
通常计算机需要接收外部实时发送的数据并用十分形象的方式显示出来。例如柱状图、饼图等等。本应用程序则采用波形的形式显示,并接将之设计为可以接收多路数据的波形显示界面。本应用程序在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 编辑 ]
35 回复
#2
bccnbin20092009-11-11 11:37
多谢版主分享
#3
gtianxingzhe2009-11-11 20:38
多谢版主分享
#4
easy8632009-11-16 17:02
多谢啦,拿回去研究下……
#5
zjsnake2009-12-01 13:54
好东西,学习了
#6
alfred111122009-12-01 13:56
好东西啊!!!学习下了!!!楼主真好!!!
#7
hao9132010-01-27 23:21
为什么没有源码下载呢
#8
hlmzrdongdong2010-02-23 18:44
回复 7楼 hao913
打开这个链接http://hlmzrdongdongsohu.
#9
zzq802010-07-16 01:47
谢谢楼主!
#10
tianyu24672010-08-02 11:11
怎么看不到源程序?
#11
eight035122010-12-01 21:47
有没有源程序可以下载啊。
#12
阿里how2011-03-10 19:51
谢谢你的东西,太好了!~
#13
kimsangbin2011-04-01 15:06
源代码下不了了...
#14
machaobest2011-05-03 16:22
怎么下载链接打不开呀?????谁能说一下,不胜感激!!!
#15
零下一度wan2011-06-25 15:00
就是原地址下载不了啊
#16
xlwhpy2011-07-14 11:30
请问你那还有这个控件的源码吗,能不能给我发一份啊,谢谢了
#17
naaisi8582012-03-08 17:16
请问在哪里可以下载源码啊?
#18
大毛2012-03-23 14:50
源码下不到呢
#19
fangjun2012-03-23 19:53
能下载吗,怎么看不到链接?
#20
gwpvip2012-03-23 21:14
回复 楼主 hlmzrdongdong
谢谢楼主分享!!!
#21
boboqq0022012-03-26 13:55
多谢楼主分享!!!!
#22
kaka20082012-03-26 14:44
多谢版主分享 !!!
#23
gaomcu2012-04-10 17:25
拿回去研究下……
#24
lihan9004052012-05-15 17:05
下载不了啊
#25
nuaazdh2012-06-11 13:39
回复 楼主 hlmzrdongdong
谢谢分享,学习一下
#26
天天笑38172012-07-19 22:07
从哪里下载?我怎么没找到啊,楼主能不能发一份源代码呢。邮箱:yueweijie@
谢谢  
#27
ystyst2012-09-15 10:20
这个连接http://hlmzrdongdongsohu.不能下载?????
#28
ystyst2012-09-15 10:23
楼主能不能发一份源代码呢。邮箱:songtao_yang@
谢谢  
#29
lulu232602012-10-23 09:56
好东西,正要用,嘻嘻嘻,谢谢啦
#30
focus05332012-10-26 15:47
好帖子....谢谢楼主这样的好人了...
#31
lynnlni1232013-09-14 16:12
多谢楼主
#32
一念轮回2014-05-14 10:52
有源程序吗?
#33
爱吃米饭2015-05-11 10:36
楼主,本人毕业刚入职就碰上此问题,需要源码,给你发邮件了,希望能抽时间回复,多谢了!
#34
爱吃米饭2015-05-11 10:53
COscopeCtrl 和2DPushGraph这两个控件有什么区别?哪个更好啊!我只有COscopeCtrl,现在要做一个界面有多个通道的波形,用那个好啊?
#35
就是想学习2015-09-17 15:32
大爱
#36
Jevonsoo2015-11-20 16:27
看见楼主的帖子,太给力了,给你发邮件了,希望抽空回复一下,想要控件源码和案例说明
1