MirrorCircle.cpp
Upload User: ggmm7909
Upload Date: 2008-11-12
Package Size: 80k
Code Size: 1k
Category:

Graph Drawing

Development Platform:

C/C++

  1. // MirrorCircle.cpp: implementation of the CMirrorCircle class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "MirrorCircle.h"
  6. //////////////////////////////////////////////////////////////////////
  7. // Construction/Destruction
  8. //////////////////////////////////////////////////////////////////////
  9. CMirrorCircle::CMirrorCircle()
  10. {
  11. }
  12. CMirrorCircle::CMirrorCircle(CShape *Shape)
  13. {
  14. if (Shape != NULL)
  15. {
  16. SourceBeginPos = Shape->m_ptFirstPos;
  17. SourceEndPos   = Shape->m_ptSecondPos;
  18. nRadius        = CDraw::Distance(SourceBeginPos,SourceEndPos);
  19. }
  20. }
  21. CMirrorCircle::~CMirrorCircle()
  22. {
  23. }
  24. void CMirrorCircle::Mirror(HDC hdc,POINT BeginPos,POINT PrePos, POINT EndPos)
  25. {
  26. int nOldMode = ::SetROP2(hdc,R2_XORPEN);
  27. HPEN hPen    = ::CreatePen( m_PenStyle,
  28.         m_PenWidth,
  29. m_PenColor^ GetBkColor(hdc) );
  30. HPEN hOldPen = (HPEN)::SelectObject(hdc,hPen);
  31. //不进行填充
  32. ::SelectObject(hdc,GetStockObject(NULL_BRUSH));
  33. SetSinCos(BeginPos,PrePos);
  34. SetMirrorPos(BeginPos,PrePos);
  35. //擦去前一次线段
  36. CDraw::DrawCircle(hdc,MirrorBeginPos,nRadius);
  37. SetSinCos(BeginPos,EndPos);
  38. SetMirrorPos(BeginPos,EndPos);
  39. //画出这一次线段
  40. CDraw::DrawCircle(hdc,MirrorBeginPos,nRadius);
  41. ::SetROP2(hdc,nOldMode);
  42. ::SelectObject(hdc,hOldPen);
  43. ::DeleteObject(hPen);
  44. }