Пора встраивать код класса в каркас MFC. Все данные должны храниться в классе документа, он у нас CTestEllipseDoc поэтому в заголовочный файл включаем описание нашего класса.
// TestEllipseDoc.h : interface of the CTestEllipseDoc class // /////////////////////////////////////////////////////////////// #if !defined(AFX_TESTELLIPSEDOC_H__304EAAEB_FB25_11D3_B050_000001260696__INCLUDED_) #define AFX_TESTELLIPSEDOC_H__304EAAEB_FB25_11D3_B050_000001260696__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "ContainerEllipce.h"
И переменную класса в классе документа.
class CTestEllipseDoc : public CDocument { ........ public: CContainerEllipce cEllipce; virtual ~CTestEllipseDoc(); ........
Первое, что делаем это в новом документе обнуляем массив и добавляем новый эллипс.
BOOL CTestEllipseDoc::OnNewDocument() { if (!CDocument::OnNewDocument()) return FALSE; cEllipce.Clear(); cEllipce.Add(CRect(10,10,100,100)); return TRUE; }
Зачем я сразу добавляю эллипс ??? Так его можно будет отредактировать потом. А зачем Вам пустой документ ????
Для сохранения документа нужно тоже писать код.
/////////////////////////////////////////////// // CTestEllipseDoc serialization void CTestEllipseDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { ar << cEllipce.GetSize(); for (int x=0;x > i ; CRect cr; for (int x=0;x > cr; cEllipce.Add(cr); } } }
Идея простая, сначала записать сколько эллипсов, а потом и сами данные. При чтении также. Читаем сколько и потом по одному добавляем в массив.
Рисовать будет функция Draw в классе вида.
/////////////////////////////////////////////// // CTestEllipseView drawing void CTestEllipseView::OnDraw(CDC* pDC) { CTestEllipseDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); pDoc->cEllipce.Draw(pDC); }
Она просто вызывает заранее подготовленную функцию рисование.