#pragma once

// CElement command target

class CElement : public CObject
{
public:
	virtual void Draw(CDC* pDC) {}	// Virtual draw operation
	CRect GetBoundRect();			// Get the bounding rectangle for an element
	virtual ~CElement();
protected:
	COLORREF m_Color;		// Color of an element
	CRect m_EnclosingRect;	// Rectangle enclosing an element
	int m_Pen;				// Pen Width
	CElement();		// Here to prevent it being called
};

class CLine :
	public CElement
{
public:
	~CLine(void);
	virtual void Draw(CDC* pDC);
	CLine(CPoint Start, CPoint End, COLORREF aColor, int PenWidth);
protected:
	CPoint m_StartPoint;
	CPoint m_EndPoint;
	CLine(void);
};

class CRectangle :
	public CElement
{
protected:
	CRectangle(void);
public:
	~CRectangle(void);
	virtual void Draw(CDC* pDC);
	CRectangle(CPoint Start, CPoint End, COLORREF aColor, int PenWidth);
};

class CCircle :
	public CElement
{
protected:
	CCircle(void);
public:
	~CCircle(void);
	virtual void Draw(CDC* pDC);	// function to display a circle

	// constructor for a circle object
	CCircle(CPoint Start, CPoint End, COLORREF aColor, int PenWidth);
};

class CCurve :
	public CElement
{
protected:
	CCurve(void);
public:
	~CCurve(void);
	virtual void Draw(CDC* pDC);

	CCurve(COLORREF aColor, int PenWidth);
};


