home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / mfc / general / propdlg / shapeobj.cpp < prev    next >
C/C++ Source or Header  |  1998-03-26  |  3KB  |  127 lines

  1. // shapeobj.cpp
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12.  
  13. #include "stdafx.h"
  14. #include "propdlg.h"
  15.  
  16. #include "shapeobj.h"
  17.  
  18. #ifdef _DEBUG
  19. #undef THIS_FILE
  20. static char BASED_CODE THIS_FILE[] = __FILE__;
  21. #endif
  22.  
  23. IMPLEMENT_SERIAL(CShape, CObject, 0)
  24.  
  25. CShape::CShape()
  26. {
  27.     m_shapecolor = black;
  28.     m_shapestyle = rectangle;
  29.     m_rect = CRect(0,0,0,0);
  30. }
  31.  
  32. CShape::CShape(SHAPE_COLOR_ENUM colorenum, SHAPE_STYLE shapestyle,
  33.     CRect& rect)
  34.     : m_shapestyle(shapestyle), m_rect(rect)
  35. {
  36.     m_shapecolor.e = colorenum;
  37. }
  38.  
  39. void CShape::Draw(CDC* pDC, BOOL bSelected)
  40. {
  41.     CPen* pPenOld = NULL;
  42.     CPen penNew;
  43.     if (bSelected)
  44.     {
  45.         penNew.CreatePen(PS_DOT, 1, RGB(0,0,0));
  46.         pPenOld = pDC->SelectObject(&penNew);
  47.     }
  48.  
  49.     CBrush brushNew((COLORREF)m_shapecolor);
  50.     CBrush* pBrushOld = pDC->SelectObject(&brushNew);
  51.     switch (m_shapestyle)
  52.     {
  53.         case rectangle:
  54.             pDC->Rectangle(m_rect);
  55.             break;
  56.         case rounded_rectangle:
  57.             pDC->RoundRect(m_rect,
  58.                 CPoint(m_rect.Width()/8, m_rect.Height()/8));
  59.             break;
  60.         case ellipse:
  61.             pDC->Ellipse(m_rect);
  62.             break;
  63.     }
  64.  
  65.     pDC->SelectObject(pBrushOld);
  66.     if (pPenOld != NULL)
  67.         pDC->SelectObject(pPenOld);
  68. }
  69.  
  70. void CShape::Serialize(CArchive& ar)
  71. {
  72.     if (ar.IsStoring())
  73.     {
  74.         ar << (WORD)m_shapecolor.e;
  75.         ar << (WORD)m_shapestyle;
  76.         ar << m_rect;
  77.     }
  78.     else
  79.     {
  80.         WORD n;
  81.         ar >> n;
  82.         m_shapecolor.e = (SHAPE_COLOR_ENUM)n;
  83.         ar >> n;
  84.         m_shapestyle = (SHAPE_STYLE)n;
  85.         ar >> m_rect;
  86.     }
  87. }
  88.  
  89.  
  90. SHAPE_COLOR::operator COLORREF() const
  91. {
  92.     switch (e)
  93.     {
  94.         case black: return RGB(0,0,0);
  95.         case red: return RGB(255,0,0);
  96.         case green: return RGB(0,255,0);
  97.         case blue: return RGB(0,0,255);
  98.     }
  99.     ASSERT(FALSE);
  100.     return 0;
  101. }
  102.  
  103. const SHAPE_COLOR& SHAPE_COLOR::operator = (COLORREF colorref)
  104. {
  105.     switch (colorref)
  106.     {
  107.         case RGB(0,0,0): e = black; break;
  108.         case RGB(255,0,0): e =  red; break;
  109.         case RGB(0,255,0): e = green; break;
  110.         case RGB(0,0,255): e = blue; break;
  111.     }
  112.     ASSERT(FALSE);
  113.     e = black;
  114.     return *this;
  115. }
  116.  
  117. SHAPE_COLOR::operator int() const
  118. {
  119.     return (int)e;
  120. };
  121.  
  122. const SHAPE_COLOR& SHAPE_COLOR::operator = (int n)
  123. {
  124.     e = (SHAPE_COLOR_ENUM)n;
  125.     return *this;
  126. };
  127.