DrawLine.cpp
上传用户:mosfetic
上传日期:2022-06-16
资源大小:4612k
文件大小:3k
源码类别:

GDI/图象编程

开发平台:

Visual C++

  1. // DrawLine.cpp: implementation of the CDrawLine class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "DrawSys.h"
  6. #include "DrawLine.h"
  7. #include "ViewProperty.h"
  8. #ifdef _DEBUG
  9. #undef THIS_FILE
  10. static char THIS_FILE[]=__FILE__;
  11. #define new DEBUG_NEW
  12. #endif
  13. //////////////////////////////////////////////////////////////////////
  14. // Construction/Destruction
  15. //////////////////////////////////////////////////////////////////////
  16. IMPLEMENT_SERIAL(CDrawLine, CObject, 1)
  17. CDrawLine::CDrawLine()
  18. {
  19. m_ptFirst.x = m_ptFirst.y = 0;
  20. m_ptSecond.x = m_ptSecond.y = 0;
  21. m_ptTemp.x = m_ptTemp.y = 0;
  22. m_bStart = FALSE;
  23. }
  24. CDrawLine::~CDrawLine()
  25. {
  26. }
  27. void CDrawLine::Draw(CDC* pDC)
  28. {
  29. pDC->MoveTo(m_ptFirst);
  30. pDC->LineTo(m_ptSecond);
  31. }
  32. void CDrawLine::OnMouseMove(CDC* pDC, UINT nFlags, CPoint point)
  33. {
  34. int iDrawMode = 0;
  35. if(m_bStart)
  36. {
  37. if(pDC)
  38. {
  39. iDrawMode = pDC->SetROP2(R2_NOTXORPEN);
  40. pDC->MoveTo(m_ptFirst);
  41. pDC->LineTo(m_ptTemp);
  42. m_ptTemp = point;
  43. pDC->MoveTo(m_ptFirst);
  44. pDC->LineTo(m_ptTemp);
  45. pDC->SetROP2(iDrawMode);
  46. }
  47. }
  48. }
  49. void CDrawLine::OnLButtonDown(CDC* pDC, UINT nFlags, CPoint point)
  50. {
  51. m_ptFirst = point;
  52. m_ptTemp = point;
  53. m_bStart = TRUE;
  54. }
  55. BOOL CDrawLine::OnLButtonUp(CDC* pDC, UINT nFlags, CPoint point)
  56. {
  57. int iDrawMode = 0;
  58. if(m_bStart)
  59. {
  60. if(pDC)
  61. {
  62. iDrawMode = pDC->SetROP2(R2_NOTXORPEN);
  63. pDC->MoveTo(m_ptFirst);
  64. pDC->LineTo(m_ptTemp);
  65. m_ptSecond = point;
  66. m_ptTemp = point;
  67. pDC->SetROP2(R2_COPYPEN);
  68. Draw(pDC);
  69. pDC->SetROP2(iDrawMode);
  70. }
  71. m_bStart = FALSE;
  72. }
  73. return (m_ptFirst!=m_ptSecond);
  74. }
  75. void CDrawLine::Serialize(CArchive& ar)
  76. {
  77. if (ar.IsStoring())
  78. {
  79. // TODO: add storing code here
  80. ar << m_ptFirst << m_ptSecond;
  81. }
  82. else
  83. {
  84. // TODO: add loading code here
  85. ar >> m_ptFirst >> m_ptSecond;
  86. }
  87. }
  88. BOOL CDrawLine::PtInShape(CPoint point)
  89. {
  90. CRect rcDraw;
  91. rcDraw.left = MIN(m_ptFirst.x, m_ptSecond.x);
  92. rcDraw.top = MIN(m_ptFirst.y, m_ptSecond.y);
  93. rcDraw.right = MAX(m_ptFirst.x, m_ptSecond.x);
  94. rcDraw.bottom = MAX(m_ptFirst.y, m_ptSecond.y);
  95. return rcDraw.PtInRect(point);
  96. }
  97. void CDrawLine::ShowProperty()
  98. {
  99. CRect rcDraw;
  100. CString strID;
  101. CString strTime;
  102. CViewProperty dlg;
  103. rcDraw.left = MIN(m_ptFirst.x, m_ptSecond.x);
  104. rcDraw.top = MIN(m_ptFirst.y, m_ptSecond.y);
  105. rcDraw.right = MAX(m_ptFirst.x, m_ptSecond.x);
  106. rcDraw.bottom = MAX(m_ptFirst.y, m_ptSecond.y);
  107. dlg.m_strType = "直线";
  108. MyFormatString(dlg.m_strID, m_iID);
  109. dlg.m_iLength = rcDraw.Width();
  110. dlg.m_iWidth = rcDraw.Height();
  111. dlg.m_strTime = m_tmCreate.Format("%Y - %m - %d");
  112. dlg.DoModal();
  113. }