RealTime.h
上传用户:mgf822
上传日期:2013-10-03
资源大小:133k
文件大小:5k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. #if !defined(__REALTIME_H__)
  2. #define __REALTIME_H__
  3. #include "graphics.h"
  4. #include "ClassArr.h"
  5. #include "Str.h"
  6. // support multi-line display with 
  7. // m_nCyclesPerSec = 0.1, 0.2, 0.4, 0.5, 1, 2, 4, 5, 8, and 10 cycles per second
  8. //////////////////////////////////////////////////////////////////////////////////
  9. ////// struct CALine
  10. struct CALine
  11. {
  12. struct CValue
  13. {
  14. bool bFlag;
  15. double YValue;
  16. };
  17. COLORREF m_nColor; // line color
  18. int m_nLineStyle; // line style
  19. int m_nLineWidth; // line width
  20. CValue* m_pValues; // value array
  21. CStr m_sName; // name
  22. CStr m_sDescription; // description
  23. CStr m_sUnit; // unit
  24. double m_dMin; // minimum value
  25. double m_dMax; // maximum value
  26. double m_dScaleLow; // scaled minimum value
  27. double m_dScaleHigh; // scaled maximum value
  28. bool Reset(DWORD size);
  29. void AddValue(double& value, DWORD begin, DWORD end);
  30. CALine();
  31. ~CALine() { if (m_pValues)  free(m_pValues); }
  32. // Operation
  33. void SetLineColor(COLORREF cr) { m_nColor = cr; }
  34. COLORREF GetLineColor() { return m_nColor; }
  35. void SetLineStyle(int ls) { m_nLineStyle = ls; }
  36. int  GetLineStyle() { return m_nLineStyle; }
  37. void SetLineWidth(int wd) { m_nLineWidth = wd; }
  38. int  GetLineWidth() { return m_nLineWidth; }
  39. void SetLineName(char* name) { m_sName = name; }
  40. const char* GetLineName() { return m_sName.GetChar(); }
  41. void SetLineDescription(char* desc) { m_sDescription = desc; }
  42. const char* GetLineDescription() { return m_sDescription.GetChar(); }
  43. void SetLineUnit(char* unit) { m_sUnit = unit; }
  44. const char* GetLineUnit() { return m_sUnit.GetChar(); }
  45. void SetLineMinValue(double min) { m_dMin = min; }
  46. double GetLineMinValue() { return m_dMin; }
  47. void SetLineMaxValue(double max) { m_dMax = max; }
  48. double GetLineMaxValue() { return m_dMax; }
  49. void SetLineScaleLow(double low) { m_dScaleLow = low; }
  50. double GetLineScaleLow() { return m_dScaleLow; }
  51. void SetLineScaleHigh(double high) { m_dScaleHigh = high; }
  52. double GetLineScaleHigh() { return m_dScaleHigh; }
  53. private:
  54. DWORD m_nSize; // number of points in the line
  55. };
  56. //////////////////////////////////////////////////////////////////////////////////
  57. ////// class CRealTime
  58. class CRealTime : public CGraphics
  59. {
  60. public:
  61. DWORD m_nSysJG;
  62. DWORD m_nSysTime;
  63. virtual bool SetRange(double xmin, double ymin, double xmax, double ymax);
  64. virtual void XAxis();
  65. virtual void Grid();
  66. bool InitialSetting(double CycsPerSec,  DWORD StartTime, DWORD TimeSpan,
  67. DWORD MaxSeconds, int XTick = 6, bool IsForward = true);
  68. void SetTickLineWidth(int width) { m_wdTickLine = width; }
  69. int  GetTickLineWidth() { return m_wdTickLine; }
  70. void SetTickLineColor(COLORREF cr) { m_crTickLine = cr; }
  71. COLORREF  GetTickLineColor() { return m_crTickLine; }
  72. void SetTickBarHight(int high) { m_sHigh = high; }
  73. void AddYValue(int i, double value){ m_LineArray[i].AddValue(value, m_nBegin, m_nEnd); }
  74. void DrawRealTimeLines();
  75. bool AddALine(COLORREF color, double low = 0, double high = 100, 
  76.   const char* name = "N/A", const char* desc = "N/A", const char* unit = "N/A", 
  77.   double min = 0, double max = 100, int style = PS_SOLID, int width = 0);
  78. bool InsertALine(int index, COLORREF color, double low = 0, double high = 100, 
  79.   const char* name = "N/A", const char* desc = "N/A", const char* unit = "N/A", 
  80.   double min = 0, double max = 100, int style = PS_SOLID, int width = 0);
  81. bool RemoveALine(int Index);
  82. void SetTimeRange(DWORD FromTime, DWORD ToTime);
  83. void UpdateTimeRange(DWORD& vtime);
  84. DWORD GetCursorTime();
  85. int  GetCursorTimeAndIndex(DWORD&);
  86. void Redraw(HWND hWnd);
  87. RECT TickBarSize();
  88. void SetPrintTime(DWORD time, int flag);
  89. void PrintTime();
  90. void Reset();
  91. CRealTime();
  92. ~CRealTime();
  93. CClassArray<CALine, CALine&> m_LineArray;
  94. CALine* m_pCurLine;
  95. CALine m_line;
  96. DWORD m_nDataPerLine;
  97. bool m_bSetingFailed;
  98. bool m_bIsForwardDrawing;
  99. int m_nSTicks; // Cursor position
  100. int m_nTick;
  101. int m_nPage;
  102. RECT m_SRect;
  103. int m_sHigh;
  104. DWORD m_nMaxTime;
  105. DWORD m_nCursorTime;
  106. DWORD m_nTimes;
  107. DWORD m_nMaxPages;
  108. bool m_bAutoScrollX;
  109. DWORD m_SpeedLevel[10];
  110. enum TimeTypes{MaxTime = 0, CursorTime};
  111. protected:
  112. DWORD m_TimeToDraw;
  113. DWORD* m_pTime;
  114. int m_nXTicks;
  115. HPEN m_CurPen;
  116. HPEN m_OldPen;
  117. DWORD m_nTimeSpan;
  118. DWORD* m_pValueTime;
  119. POINT* m_pLineArray;
  120. DWORD m_nFrom;
  121. DWORD m_nTo; 
  122. DWORD m_nBegin;
  123. DWORD m_nEnd;
  124. char m_sTempStr[32];
  125. private:
  126. DWORD m_nSysJS;
  127. int ForwardDraw(int nB, int nE);
  128. int BackwardDraw(int nB, int nE);
  129. void DrawXAxisTimeTicks(int x, int y, DWORD& ticks);
  130. void ShowTime(int x, int y, const char* Tag, DWORD& cTime);
  131. void DrawCurrentLine();
  132. void DrawTickLine();
  133. DWORD m_nP;
  134. double m_nCyclesPerSec;
  135. DWORD m_nTimeStart;
  136. int m_nCounter;
  137. DWORD m_nMin;
  138. DWORD m_nMax;
  139. int m_wdTickLine;
  140. int m_nStep;
  141. int xb, yb, xe, ye; // save some time !!!
  142. COLORREF m_crTickLine;
  143. };
  144. #endif