MultiColorPlotCtrl.h 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. ////////////////////////////////////////////////////////////////////////
  2. //文件名 :MULTICOLORPLOT.H
  3. //控件说明:实时曲线显示功能控件,提供LINE和BAR两种曲线显示功能
  4. //作者: 戚高
  5. //完成日期:2007-01-17
  6. //版权 :可以自由使用代码
  7. ///////////////////////////////////////////////////////////////////////
  8. #if !defined(AFX_MULTICOLORPLOTCTRL_H__2C4A3AEB_9552_478C_A5DE_FF03CAA81C7B__INCLUDED_)
  9. #define AFX_MULTICOLORPLOTCTRL_H__2C4A3AEB_9552_478C_A5DE_FF03CAA81C7B__INCLUDED_
  10. #if _MSC_VER > 1000
  11. #pragma once
  12. #endif // _MSC_VER > 1000
  13. // MultiColorPlotCtrl.h : header file
  14. //
  15. //---------------------------------user define head files
  16. #include "afxwin.h"
  17. #include <math.h>
  18. #include "MemDC.h"
  19. #define BAR 0
  20. #define LINE 1
  21. #define GRID_TIMER 1
  22. //网格刷新速率
  23. #define GRID_UPDATE_SPEED 50
  24. typedef struct tagData_Point
  25. {
  26. float fx ;
  27. float fy ;
  28. } DATA_POINT ;
  29. /////////////////////////////////////////////////////////////////////////////
  30. // CMultiColorPlotCtrl window
  31. class CMultiColorPlotCtrl : public CStatic
  32. {
  33. // Construction
  34. public:
  35. CMultiColorPlotCtrl();
  36. private: // 公共属性
  37. CBitmap *m_pBitmapOldBackground ;
  38. CBitmap m_pBitmapBackground ;
  39. CDC m_dcBackground;
  40. int nPlotType ; // 曲线类型 BAR 或 LINE // BAR
  41. // 网格X方向上的间距
  42. int nGridResolutionX ; // 10
  43. // 网格Y方向上的间距
  44. int nGridResolutionY ; // 10
  45. // 网格滚动的速度和方向(正值为从左向右滚动和从上到下,否则反之。0不动)
  46. int nGridScrollSpeedX ; // -1
  47. int nGridScrollSpeedY ; // 0
  48. // 数据点分辨率大小(即:一个数据点占据的像素数)
  49. int nPlotGranulatrity ; // 2
  50. // 网格线宽度
  51. int nGridLineWidth ; // 1
  52. // 背景色
  53. COLORREF m_clrDarkBack ; // RGB(0,0,75)
  54. // 前景色
  55. COLORREF m_clrDarkLine ; // RGB(32,64,32)
  56. // 控件矩形
  57. CRect m_rectCtrl;
  58. // 控件的尺寸
  59. CSize m_Size ;
  60. // 控件可容纳可见的数据点数
  61. int nPlotData ; // 0
  62. // 实际数据
  63. float * pfData ; // 0
  64. // 数据范围
  65. float fLow , fHigh ; // 0,0
  66. // 数据比例
  67. float fScaleY ; // 1.0
  68. // 数据点处的颜色
  69. COLORREF m_clrCyanData ; // RGB ( 0,255,255 )
  70. // 画笔
  71. CPen m_GridPen ;
  72. // 数据点位图画刷
  73. CBrush m_clrBrush ;
  74. // 网格开始位置
  75. int nGridStarPosX , nGridStarPosY ; // 0,0
  76. // 锁定显示范围
  77. bool bLock ; // true---锁定
  78. // 控件上显示的字体
  79. CFont m_SmallFont ;
  80. // Y轴刻度的颜色
  81. COLORREF m_clrAxisScaleY ; // RGB ( 0,255,255 )
  82. // 是否显示Y轴刻度数字
  83. int nShowFormatDataText ; // 0---不显示
  84. // 控件标题
  85. TCHAR szTitls [MAX_PATH * sizeof ( TCHAR ) + 1] ; // NULL
  86. // 曲线单位
  87. TCHAR szUints [32 * sizeof ( TCHAR ) + 1] ; // NULL
  88. // LINE属性
  89. // 曲线颜色
  90. COLORREF m_clrLinePen ; // RGB(0,255,0)
  91. // 曲线宽度
  92. int nLineWidth ;
  93. // BAR颜色
  94. COLORREF m_clrUp ;
  95. COLORREF m_clrDown ;
  96. DATA_POINT * g_DataPoint ;
  97. private:
  98. // 关键代码
  99. CRITICAL_SECTION g_cs ;
  100. // Attributes
  101. public:
  102. // Operations
  103. public:
  104. // Overrides
  105. // ClassWizard generated virtual function overrides
  106. //{{AFX_VIRTUAL(CMultiColorPlotCtrl)
  107. protected:
  108. virtual void PreSubclassWindow();
  109. //}}AFX_VIRTUAL
  110. // Implementation
  111. public:
  112. void SetLineColorWidth ( COLORREF clrLine = RGB ( 0 , 255 , 0 ) , int nWidth = 1 );
  113. void SetBarColor ( COLORREF clrUp , COLORREF clrDown , bool bfRfastness = false , bool bfGfastness = false , bool bfBfastness = false );
  114. void ShowTitle ( int nShow = 1 );
  115. void SetUnit ( LPCTSTR pctUint = NULL );
  116. void SetTitle ( LPCTSTR pctTitle = NULL );
  117. void SetAxisScaleClrY ( COLORREF clr = RGB ( 0 , 255 , 255 ) );
  118. void SetLinePen ( int nWidth , COLORREF clr );
  119. void SetRang ( float fL , float fH );
  120. void SetGridLineClr ( COLORREF clr );
  121. BOOL SetPlotGranulatrity ( int nPlotGrltiy );
  122. void SetPlotType ( int nType );
  123. virtual ~CMultiColorPlotCtrl();
  124. // Generated message map functions
  125. protected:
  126. //{{AFX_MSG(CMultiColorPlotCtrl)
  127. afx_msg void OnPaint();
  128. //}}AFX_MSG
  129. DECLARE_MESSAGE_MAP()
  130. public:
  131. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  132. void ReconstructControl(void);
  133. protected:
  134. void InitColorPlot(CDC *pDC);
  135. private:
  136. void DrawBackGroundGrid(CDC * pDC);
  137. protected:
  138. void DrawValue(CDC * pDC);
  139. void DrawAxisScaleYValue(CDC * pDC);
  140. public:
  141. afx_msg void OnTimer(UINT nIDEvent);
  142. // 设置网格间距
  143. void SetGridResolutionX(int nGridReluX);
  144. // 设置网格间距
  145. void SetGridResolutionY(int nGridReluY);
  146. // 设置网格滚动速度,正值为从左向右滚动,0不动
  147. void SetGridScrollSpeedX(int nSpeedX);
  148. // 正值为从上到下滚动,0不动
  149. void SetGridScrollSpeedY(int nSpeedY);
  150. // 网格线宽度
  151. void SetGridLineWidth(int nWidth);
  152. // 背景色
  153. void SetGridBackClr(COLORREF clr);
  154. // // 锁定数据显示范围
  155. void LockRang(bool bfLock = true);
  156. // 锁定数据显示范围
  157. void LockRang(float fMin, float fMax);
  158. // 设置数据
  159. void SetData(float fData);
  160. // 曲线颜色
  161. void SetLineColor(COLORREF clrLine = RGB ( 0 , 255 , 0 ));
  162. void SetLineWidth(int nWidth = 1);
  163. const COLORREF GetLineColor(void);
  164. const int GetLineWidth(void);
  165. };
  166. /////////////////////////////////////////////////////////////////////////////
  167. //{{AFX_INSERT_LOCATION}}
  168. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  169. #endif // !defined(AFX_MULTICOLORPLOTCTRL_H__2C4A3AEB_9552_478C_A5DE_FF03CAA81C7B__INCLUDED_)