Иллюстрированный самоучитель по Visual Studio.Net


Класс CPolygon - часть 2


Все перечисленные свойства «почти бесплатно» получают классы, произведенные от класса библиотеки MFC cobject. Вставьте в файл TreeDoc.h после строки с определением типа VECPTS, но до объявления класса CTreeDoc, объявление класса CPolygon:

class CPolygon: public CObject

{

DECLARE_SERIAL(CPolygon)

public:

CTreeDoc *m_pDoc; // Обратный указатель

VECPTS m_Points; // Контейнер вещественных точек

UINT m_nPenWidth; // Толщина пера

COLORREF m PenColor; // Цвет пера

COLORREF m_BrushColor; // Цвет кисти

CDPoint m_ptLT; // Координата левого верхнего угла

CDPoint m_ptRB; // Координата правого нижнего угла

//====== Конструктор по умолчанию

CPolygon () ;

//====== Конструктор копирования

CPolygon(const CPolygons poly);

//====== Операция присвоения

CPolygons operator= (const CPolygons poly);

//====== Операция выбора i-той точки

CDPointS operator!] (UINT i);

//====== Вычисление обрамляющего прямоугольника

void GetRect(CDPointS ptLT, CDPointS ptRB);

//====== Установка обратного указателя

void Set (CTreeDoc *p); //====== Изменение атрибутов

void SettCTreeDoc *p,COLORREF bCl,COLORREF pCl,UINT pen);

//====== Создание трех простых заготовок

void MakeStar();

// Звезда

void MakeTria();

// Треугольник

void MakePent(); // Пятиугольник

//====== Изображение в контексте устройства

virtual void Draw (CDC *pDC, bool bContour);

//====== Сохранение и восстановление данных

virtual void Serialize(CArchiveS ar);

virtual ~CPolygon(); // Деструктор

//====== Новый тип данных: контейнер полигонов

typedef vector<CPolygon, allocator<CPolygon> > VECPOLY;

Каждый объект класса CPolygon должен иметь связь с данными документа. Это осуществляется путем запоминания адреса документа в переменной m_pDoc, которая играет роль обратного указателя. Такой прием, когда вложенный объект помнит адрес объемлющей его структуры данных, очень распространен в объектно-ориентированном программировании. Он существенно упрощает обмен данными между двумя объектами.



Начало  Назад  Вперед