实时数据动态曲线显示控件_第1页
实时数据动态曲线显示控件_第2页
实时数据动态曲线显示控件_第3页
实时数据动态曲线显示控件_第4页
实时数据动态曲线显示控件_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实时数据动态曲线显示控件2006年07月27日 星期四 17:32实时数据动态曲线显示控件源码下载 源码下载                在很多实际的应用中,我们很可能需要将定期的到的数据以曲线的形势显示出来,以便实时的查看当前走势,这在工业领域尤为常见。本文就介绍一种将实时采集到的信号以动态曲线的形势绘制出来的方法,事例代码并不完善和通用,但希望能对广大初学者起以借鉴作用,达到抛砖引玉之效果。    &

2、#160;           本控件类是从CStatic 类继承而来,自己处理了 DrawItem 消息函数达到绘图效果。                同时你还可以在这里学习到如何使用双缓冲技术实现高速无闪烁绘图,以及安全有效的使用 STL 的 list 功能。其它实现很简单,没有什么好说的,请参看源代码就是了。  

3、0;             本控件实现功能:                         1.动态添加和删除曲线          &

4、#160;              2.可随时改变曲线的属性(颜色、线型、粗细)                         3.可随时调整曲线显示范围和区域     

5、60;                   4.可随时调整背景颜色和网格                         5.可显示 X、Y 坐标(X 坐标待添加中) &

6、#160;                       6.具备自适应显示范围(当需要动态调整控件大小时,曲线显示范围可自动适应)        注意:本文只是给出了一种可以方便管理的、易扩展的实时绘制曲线的方法,如果需要直接使用本文代码需要在 VC.2003 及以上版本的编译环境中编译(不支持VC

7、6.0) 。效果图头文件* Plot.h *#include <list>using namespace std;class CPlot :              public CStaticpublic:              CPlot(void);     

8、60;        virtual CPlot(void);public:           / 公共接口              / 有网格、没网格            

9、  static enum BK_GRID GRID = 0, NOGRID = 1;              / 实线、虚线、点线、点划线、点点划线(SOLID, DASH, DOT, DASHDOT, DASHDOTDOT)              static enum LINE_STYLESOLID, DASH, D

10、OT, DASHDOT, DASHDOTDOT;              / 网格滚动速度              static enum ROLL_SPEEDIDLE = -1, BELOW = 5000, BELOW_NORMAL = 2000, NORMAL = 1000, ABOVE_NORMAL = 500, HIGH =

11、200, ABOVE_HIGH = 100, REALTIME = 0;              / 创建静态控件              bool Create(const RECT & rect, CWnd * pParentWnd, DWORD dwStyle = NULL , UINT nID = 0); &

12、#160;            / 创建静态控件              bool Create(const int nTop, const int nLeft, const int nRight, const int nBottom, CWnd * pParentWnd, DWORD dwStyled = NULL , UINT nID = 0);&#

13、160;             / 创建线              / pctName - 曲线名(不能重复)              bool CreatePlot(PCTSTR pctName, COLORRE

14、F clrFg = RGB(0, 255, 0), int nLowerY = 0, int nUpperY = 100, LINE_STYLE lineStyle = SOLID, int nWidth = 0, int nTransparence = 100, bool bRepaint = true);              /销毁线(通过线名)         &#

15、160;    bool DestroyPlot(PCTSTR pctName, bool bRepaint = true);              / 背景色包括背景网格色              void SetbgColor(COLORREF clrBg = RGB(0, 0, 80), bool

16、 bRepaint = true);              / 获取背景色              void GetbgColor(COLORREF &clr);              / 背

17、景网格设置              void SetGrid(BK_GRID bDrawgGrid = GRID, COLORREF clrGrid = RGB(64, 96, 64), LINE_STYLE lineStyle = SOLID, int nTransparence = 100, bool bRepaint = true);          

18、60;   / 获取网格参数              void GetGrid(bool &bfShow, COLORREF &clr, int &nStyle, int &nTransparence);              / 前属性(线属性)   

19、;           void SetfgAttribute(PCTSTR pctName, COLORREF clrFg = RGB(0, 255, 0), LINE_STYLE lineStyle = SOLID, int nWidth = 0, int nTransparence = 100, bool bRepaint = true);            

20、0; / 获取线属性              void GetfgAttribute(PCTSTR pctName, COLORREF &clr, int &nStyle, int &nWidth, int &nTransparence);              / 网格滚动速度  

21、;            void SetGridRollSpeed(ROLL_SPEED rSpeed = IDLE, bool bRepaint = true);              / 获取网格滚动速度            &

22、#160; int GetGridRollSpeed();              / 范围              void SetRange(PCTSTR pctName, int nLowerY = 0, int nUpperY = 100, bool bRepaint = true);   

23、60;          / 获取线范围              void GetRange(PCTSTR pctName, int &nLowerY, int &nUpperY);              / 当前点 

24、             void SetPos(PCTSTR pctName, int nPos, bool bRepaint = true);              / 显示标签(返回:之前标签状态)            

25、;  bool ShowLabel(bool bLable = false, bool bRepaint = true);              / 显示 Y 轴大步进刻度              bool ShowLargeScaleY(bool bShow, bool bRepaint = true); &#

26、160;            / 获取 Y 轴大步进刻度显示状态              bool IsShowLargeScaleY();              / 显示 Y 轴小步进刻度  

27、0;           bool ShowSmallScaleY(bool bShow, bool bRepaint = true);              / 获取 Y 轴小步进刻度显示状态              bool Is

28、ShowSmallScaleY();              / 设置刻度轴大的步进值              void SetLargeChangeValue(int nLargeChange, bool bRepaint = true);        

29、;      / 获取刻度轴大的步进值              int GetLargeChangeValue();              / 设置刻度轴小的步进值          

30、    void SetSmallChangeValue(int nSmallChange, bool bRepaint = true);              / 获取刻度轴小的步进值              int GetSmallChangeValue();   &#

31、160;          / 获取线数              int GetCurveCount();              / 获取线名        

32、60;     / nIndex 线序号(以添加先后为序),从 0 开始              bool GetCurveName(int nIndex, PCTSTR &pctName);private:          / 私有属性       

33、60;      / 背景、网格、前景色              COLORREF bgClr, gridClr, fgClr;              / 是否绘网格          

34、;    bool bDrawGrid;              / 是否显示标签              bool bfShowLable;              / 是

35、否画刻度轴(Y 大、小步进刻度)              bool bDrawLargeScaleY, bDrawSmallScaleY;              / 网格透明度             

36、float fGridTransparent;              / 网格线型              int nGridStyle;              / 网格 X 轴向左偏移量(负值向左滚

37、动、0 不滚动)              int nOffsetX;              / 网格 Y 轴向左偏移量(负值向上滚动、0 不滚动)              int nOffsetY;&#

38、160;             / 滚动速度              int nRollSpeed;              / Y 轴大步进值      

39、;        int nAxisLargeY;              / Y 周小步进值              int nAxisSmallY;         

40、60;    / 显示的字体              CFont m_Font;              / 线属性              typedef struct _

41、LINE_ATTRIBUTE                     / 线名                    PCTSTR pctName;      

42、              / 线色                    COLORREF clr;               

43、;     / 透明度                    float fTransparence;                    / 线风格  &#

44、160;                 int nLineStyle;                    / 线宽           

45、;         int nWidth;                    / Y 范围                    int

46、 nLowerY, nUpperY;                    / 组成曲线的点                    int * pDot;     

47、60;              / 点数                    int nCountDot;              LINE_A

48、TTRIBUTE, *PLINE_ATTRIBUTE;              / 记录每条线的属性              std:list<LINE_ATTRIBUTE> list_LineAttribute;         &

49、#160;    / 记录每条线的属性的迭代器              std:list<LINE_ATTRIBUTE>:iterator list_Iter_LineAttribute;              / 内存 DC     

50、60;        CDC * pMemDC;private:          / 私有方法              / 销毁所有线              void De

51、stroyAll();              / 更新背景网格              inline bool UpdateBackGround(CDC *pMemDC, const RECT &rect);          

52、;    / 更新数据              inline bool Update(CDC *pMemDC, const RECT &rect);              / 重绘窗口         &#

53、160;    inline void Redraw();              / 调整曲线每屏显示的点数              / nFrenchCurveW 为当前显示板的宽度          

54、    inline bool AdjustCurveDot(int nFrenchCurveW);public:              virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);              DECLARE_MESSA

55、GE_MAP()              afx_msg void OnTimer(UINT nIDEvent);              afx_msg BOOL OnEraseBkgnd(CDC* pDC);          &#

56、160;   afx_msg void OnSize(UINT nType, int cx, int cy);* End          Plot.h *实现文件* Plot.cpp *              由于文章长度的限制,这里不能贴出全部代码。索性实现文件就不贴出来了,如果哪位朋友对本文感性兴趣,可来信索取或 直接下载 全部代码和事例工程。&#

57、160;   * End          Plot.cpp *              以上是本文介绍的控件片断代码,代码还不完善,在这里衷心的希望广大程序爱好者针对本文多批评、多斧正、多交流。类别:Windows | 添加到搜藏 | 浏览(2572) | 评论 (138)  下一篇:系统性能计数器 最近读者:登录

58、后,您就出现在这里。  wry2008wry56322546vbadvisormyf778899upcgyhbbstrikeleonyango0死亡骑士0o 网友评论:1匿名网友 2006年08月02日 星期三 14:25 | 回复 我什么也看不懂,太复杂了.  2网友:Lemon2006年11月09日 星期四 09:37 | 回复 谢谢楼主,好好学习一下。  3网友:wdt2007年01月18日 星期四 13:03 | 回复 能否给我发一份我学习学习啊。谢谢  5wlzqi 2007年01月19日 星期五 08:45 | 回复 你好

59、,请把你的联系方式Email给我,我会给你发过去。  6网友:wdt2007年01月19日 星期五 10:54 | 回复 大哥,有没有VC6。0的啊,给我发一份嘛。感谢! dingdingcandy  7网友:wlzqi2007年01月22日 星期一 09:29 | 回复 wdt 你好: 已发送代码,并附如何更改代码为可在VC6.0下正确编译的方法。  8网友:yzj2007年01月26日 星期五 18:48 | 回复 大哥,给我发一份给俺将万分感谢 dingdingcandy  9网友:yzj2007年01月26日 星期五 18:50 | 回复 大哥,

60、给我发一份给俺将万分感谢 aboutg 邮箱写错了  10网友:yzj2007年01月26日 星期五 19:14 | 回复 m_record.m_strFilter.Format("name>=#%s# and name<=#%s#",strtm_begin,strtm_over); m_record.m_strFilter.Format("name>=%ld and name<=ld%",strtm_begin,strtm_over); 想查询一时间(日期+时间)段内的数据,数据库用mfc odbc, access,

61、两种方法好像能过滤但是对,1,小时分钟秒好像不起作用,2,月份和日期好像不起作用我上面用法错了吗?仁兄有无其他方法,指点一下小弟现在做一小软件 与一仪器通讯 记录时间和数据 画曲线 有无例子参考一下万分感谢 aboutg  11网友:wangxin2007年01月27日 星期六 15:22 | 回复 我也需要一份,万分感谢 hce_wx  12网友:nierui2007年02月01日 星期四 21:05 | 回复 给我也发一份啊,VC6.0的!万分感谢! 60312nr  13wlzqi 2007年02月02日 星期五 10:15 | 回复 代码都发了,大家要有什

62、么问题,欢迎提出。再次感谢大家光临我的 Blog 。  14网友:feier2007年02月08日 星期四 23:05 | 回复 能不能给我也发一分源代码,在vc+.中能编译的,十分感谢!邮箱是  15网友:wlzqi2007年02月09日 星期五 08:37 | 回复 feier 你好: 你需要的代码已经发送了, 内附有改动说明,要是有什么问题,欢迎提出。  16网友:feier2007年02月11日 星期日 11:56 | 回复 谢谢,邮件已经收到,如果还有什么问题请不吝赐教,呵呵!  17网友:Tracy2007年02月15日

63、星期四 16:32 | 回复 请你发一份源代码到我邮箱好吗 wyqdzyj 我还想请教你: 如果我想在这些曲线上添加几个控制点,并可用鼠标实现拖动曲线的操作,应该怎样做? 就是有点像音频软件中的参量均衡器的图形调节一样. 先谢谢了!  18网友:wlzqi2007年02月16日 星期五 09:49 | 回复 代码已经发送,你需要的功能需要你自己添加,前提是先看懂我的代码,还有,必须对代码再做一步优化,否则鼠标拖动时反应可能会慢。  19网友:rock2007年02月28日 星期三 13:32 | 回复 小弟佩服!求源代码一份:shuaiyan007  20网友:peyi2007年03月04日 星期日 15:51 | 回复 楼主,能不能也发一份可以在VC6.0中编译的给我啊,刚初学VC,还有好多不懂,谢谢!我的邮箱:peyi123  21网友:mengxz2007年03月08日 星期四 10:55 | 回复 楼主,能不能也发一份可以在VC6.0中编译的给我啊,我也刚初学VC,还有好多不懂,谢谢!我的邮箱mengxuezhen  22网友:mumu2007年03月12日 星期一 10:22 | 回复 楼主,请发一份可以在VC6.0下编译的给我,非常感谢!邮箱:zjw1982_2004  23

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论