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

对话框与窗口

开发平台:

Visual C++

  1. #if !defined(__GRAPHICS_H__)
  2. #define __GRAPHICS_H__
  3. #include <math.h>
  4. #define  PiV     3.14159265358979324                       
  5. #define  ConstV  180
  6. //////////////////////////////////////////////////////////////////////////////////
  7. ////// class CGraphics
  8. class CGraphics
  9. {
  10. public:
  11. CGraphics();
  12. ~CGraphics() {if (m_Bitmap) ::DeleteObject(m_Bitmap); }
  13. enum   CTextAlign { LEFT = 0, CENTER = 1, RIGHT = 2, TOP = 0, BOTTOM = 2 };
  14. enum   CMarkerType { CROSS, XCROSS, STAR, CIRCLE, TRIANGLE, DIAMOND, 
  15.   SQUARE, FCIRCLE, FTRIANGLE, FDIAMOND, FSQUARE };
  16. // Operations
  17. void SetRatio(double xmin = 0, double ymin = 0, double xmax = 1, double ymax = 1);
  18. void SetPrintScale(HDC& hDC, RECT& rect);
  19. void RecalcRects(RECT& rt);
  20. void BeginDraw(HDC hDC);
  21. void EndDraw(HDC hDC);
  22. void SetBackColor(COLORREF cr) { m_nBackColor = cr; }
  23. COLORREF GetBackColor() { return m_nBackColor; }
  24. void SetGridColor(COLORREF cr) { m_nGridColor = cr; }
  25. COLORREF GetGridColor() { return m_nGridColor; }
  26. void SetBorderColor(COLORREF cr) { m_nBorderColor = cr; }
  27. COLORREF GetBorderColor() { return m_nBorderColor; }
  28. void SetTickColor(COLORREF cr) { m_nTickColor = cr; }
  29. COLORREF GetTickColor() { return m_nTickColor; }
  30. void SetTitleColor(COLORREF cr) { m_nTitleColor = cr; }
  31. COLORREF GetTitleColor() { return m_nTitleColor; }
  32. HDC GetHDC() { return m_hDC; }
  33. void SetXNumOfTicks(int x = 50) { XTicks = x; }
  34. void SetYNumOfTicks(int y = 50) { YTicks = y; }
  35. void SetXNumOfGridTicks(int x = 10) { XGridTicks = x; }
  36. void SetYNumOfGridTicks(int y = 10) { YGridTicks = y; }
  37. void SetXDecimal(int decimal) { m_nXDecimal = decimal; }
  38. int  GetXDecimal() { return m_nXDecimal; }
  39. void SetYDecimal(int decimal) { m_nYDecimal = decimal; }
  40. int  GetYDecimal() { return m_nYDecimal; }
  41. void SetStringAlign(int x, int y) { m_StrAlign.HAlign = x; m_StrAlign.VAlign = y; }
  42. void SetFontName(const char* FontName) { strcpy(m_LogFont.lfFaceName, FontName); }
  43. void EnableLegend(bool bFlag = true) { m_bEnableLegend = bFlag; }
  44. void EnableLegendShadow(bool bFlag = true) { m_bLegendShadow = bFlag; }
  45. void EnableMemoryDraw(bool bFlag = false) { m_bMemoryDraw = bFlag; }
  46. void DrawBoundary(COLORREF cr, int size);
  47. void DrawShadow(int n);
  48. void Title(const char* Title, int Pos = TOP);
  49. void XAxisTitle(const char* Title, int Pos = BOTTOM);
  50. void YAxisTitle(const char* Title, int Pos = LEFT);
  51. void Axes();
  52. virtual bool SetRange(double xmin, double ymin, double xmax, double ymax) = 0;
  53. virtual void XAxis();
  54. virtual void YAxis();
  55. virtual void Grid();
  56. RECT m_PlotRect;
  57. bool m_bMemoryDraw;
  58. bool m_bPrinting;
  59. int m_nPrintScale;
  60. COLORREF crTable[16];
  61. protected:
  62. enum   CAxesType { XY, XLOG, YLOG, XYLOG };
  63. struct CScale { double dx, dy, xmin, ymin, xmax, ymax; };
  64. struct CRatio { double xmin, ymin, xmax, ymax; };
  65. struct StringAlign { int HAlign, VAlign; };
  66. CScale m_Scale;
  67. CRatio m_Ratio;
  68. LOGFONT m_LogFont;
  69. COLORREF m_nBackColor;
  70. COLORREF m_nGridColor;
  71. COLORREF m_nBorderColor;
  72. COLORREF m_nTickColor;
  73. COLORREF m_nTitleColor;
  74. HFONT m_Font;
  75. SIZE m_Size;
  76. StringAlign m_StrAlign;
  77. int m_nXDecimal;
  78. int m_nYDecimal;
  79. bool m_bEnableLegend;
  80. bool m_bLegendShadow;
  81. int m_nAxesType;
  82. int m_nXStep;
  83. int m_nYStep;
  84. int m_lM; // left margin
  85. int m_tM; // right margin
  86. int m_rM; // top margin
  87. int m_bM; // bottom margin
  88. RECT m_Rect;
  89. RECT m_ClipBox;
  90. RECT m_ClientRect;
  91. HDC m_hDC;
  92. POINT m_Pt;
  93. HBITMAP m_Bitmap;
  94. HBITMAP m_OldBitmap;
  95. int GL, GR, GT, GB, PX, PY;
  96. int XTicks, YTicks, XGridTicks, YGridTicks;
  97. virtual void Legend(COLORREF cr, int Index, const char* Name);
  98. void GetPixelRect(RECT& rt);
  99. void SetPixelRect(RECT rt);
  100. void DrawBkGround();
  101. void DrawCircle(int x, int y, int radius);
  102. void DrawFilledCircle(int x, int y, int radius);
  103. void DrawRectangle(int x1, int y1, int x2, int y2);
  104. void DrawMarker(int x, int y, int mode, int size = 6);
  105. void Format(int decimal, char* str, float value);
  106. void PrintString(int x, int y, int theta, const char* fmt);
  107. void Ticks();
  108. void RightYTick();
  109. void DrawLine(int x1, int y1, int x2, int y2) { ::MoveToEx(m_hDC, x1, y1, NULL); ::LineTo(m_hDC, x2, y2); }
  110. void DrawLine(POINT& pt1, POINT& pt2) { DrawLine(pt1.x, pt1.y, pt2.x, pt2.y); }
  111. void DrawCircle(POINT& pt, int radius) { DrawCircle(pt.x, pt.y, radius); }
  112. void DrawFilledCircle(POINT& pt, int radius) { DrawFilledCircle(pt.x, pt.y, radius); }
  113. void DrawRectangle(POINT& pt1, POINT& pt2) { DrawRectangle(pt1.x, pt1.y, pt2.x, pt2.y); }
  114. void DrawMarker(POINT& pt, int mode, int size = 6) { DrawMarker(pt.x, pt.y, mode, size); }
  115. void PrintString(POINT& pt, int theta, const char* fmt) { PrintString(pt.x, pt.y, theta, fmt); }
  116. };
  117. #endif