Rectangle.cpp
上传用户:hehe2haha
上传日期:2013-08-16
资源大小:161k
文件大小:3k
源码类别:

CAD

开发平台:

Visual C++

  1. // Rectangle.cpp: implementation of the CRectangle class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Rectangle.h"
  6. //////////////////////////////////////////////////////////////////////
  7. // Construction/Destruction
  8. //////////////////////////////////////////////////////////////////////
  9. CRectangle::CRectangle()
  10. {
  11. strcpy(m_className,"CRectangle");
  12. }
  13. CRectangle::~CRectangle()
  14. {
  15. }
  16. void CRectangle::Draw(HDC hdc)
  17. {
  18. HPEN hPen = ::CreatePen( fnPenStyle,nWidth,crColor);
  19. HPEN hOldPen = (HPEN)::SelectObject(hdc,hPen);
  20. //不进行填充
  21. ::SelectObject(hdc,GetStockObject(NULL_BRUSH));
  22. Rectangle( hdc,              
  23.    m_ptFirstPos.x,   
  24.    m_ptFirstPos.y,   
  25.    m_ptSecondPos.x,  
  26.    m_ptSecondPos.y   
  27.  );
  28. ::SelectObject(hdc,hOldPen);
  29. ::DeleteObject(hPen);
  30. if(isPick == TRUE)
  31. {
  32. //恢复填充
  33. ::SelectObject(hdc,GetStockObject(WHITE_BRUSH));
  34. DrawRect(hdc);
  35. }
  36. }
  37. void CRectangle::DrawRect(HDC hdc)
  38. {
  39. //Rect为标记圆的半径
  40. //top left
  41. Ellipse(hdc,m_ptFirstPos.x - Rect,m_ptFirstPos.y - Rect,
  42. m_ptFirstPos.x + Rect,m_ptFirstPos.y + Rect);
  43. //top right
  44. Ellipse(hdc,m_ptSecondPos.x - Rect,m_ptFirstPos.y - Rect,
  45. m_ptSecondPos.x + Rect,m_ptFirstPos.y + Rect);
  46. //top middle
  47. Ellipse(hdc,mPtx - Rect,m_ptFirstPos.y - Rect,
  48. mPtx + Rect,m_ptFirstPos.y + Rect);
  49. //left middle
  50. Ellipse(hdc,m_ptFirstPos.x - Rect,mPty - Rect,
  51. m_ptFirstPos.x + Rect,mPty + Rect);
  52. //right middle
  53. Ellipse(hdc,m_ptSecondPos.x - Rect,mPty - Rect,
  54. m_ptSecondPos.x + Rect,mPty + Rect);
  55. //buttom middle
  56. Ellipse(hdc,mPtx - Rect,m_ptSecondPos.y - Rect,
  57. mPtx + Rect,m_ptSecondPos.y + Rect);
  58. //buttom left
  59. Ellipse(hdc,m_ptFirstPos.x - Rect,m_ptSecondPos.y - Rect,
  60. m_ptFirstPos.x + Rect,m_ptSecondPos.y + Rect);
  61. //buttom right
  62. Ellipse(hdc,m_ptSecondPos.x - Rect,m_ptSecondPos.y - Rect,
  63. m_ptSecondPos.x + Rect,m_ptSecondPos.y + Rect);
  64. }
  65. BOOL CRectangle::pick(POINT pt)
  66. {
  67. //矩形中心坐标
  68. mPtx = (m_ptSecondPos.x + m_ptFirstPos.x) / 2;
  69. mPty = (m_ptSecondPos.y + m_ptFirstPos.y) / 2;
  70. //矩形的长和宽
  71. int hLength = abs(m_ptSecondPos.x - m_ptFirstPos.x) / 2;
  72. int hWidth  = abs(m_ptSecondPos.y - m_ptFirstPos.y) / 2;
  73. //拾取的有效范围正负5个象素
  74. if (pt.x < m_ptFirstPos.x + 5 && pt.x > m_ptFirstPos.x - 5)
  75. {
  76. if (pt.y < mPty + hWidth + 5 && pt.y > mPty - hWidth - 5 )
  77. return TRUE;
  78. }
  79. if (pt.x < m_ptSecondPos.x + 5 && pt.x > m_ptSecondPos.x - 5)
  80. {
  81. if (pt.y < mPty + hWidth + 5 && pt.y > mPty - hWidth - 5 )
  82. return TRUE;
  83. }
  84. if (pt.y < m_ptFirstPos.y + 5 && pt.y > m_ptFirstPos.y - 5)
  85. {
  86. if (pt.x < mPtx + hLength + 5 && pt.x > mPtx - hLength - 5 )
  87. return TRUE;
  88. }
  89. if (pt.y < m_ptSecondPos.y + 5 && pt.y > m_ptSecondPos.y - 5)
  90. {
  91. if (pt.x < mPtx + hLength + 5 && pt.x > mPtx - hLength - 5 )
  92. return TRUE;
  93. }
  94. return FALSE;
  95. }