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


Развитие класса документа



Теперь, когда мы имеем вспомогательные классы (CDPoint и CPolygon), можно подумать о структуре данных класса CTreeDoc. Нам понадобятся:

  • массив (контейнер) полигонов, которые соответствуют файлам документов, обнаруженных в текущем каталоге;

  • массив строк текста с файловыми путями этих документов;

  • один «дежурный» полигон, который в данный момент редактируется, то есть выбран для демонстрации в окне третьего представления (CDrawView);

  • размеры документа в логической системе координат (Page space);

  • коэффициент увеличения размеров при переходе из World в Page-пространство.

Кроме этого, нам понадобятся методы для управления тремя окнами: CLef tview, CRightView и CDrawView. Последний класс будет управлять окном, в котором полигон может быть отредактирован. Этот класс надо еще создать. Замените существующий интерфейс класса CTreeDoc на тот, который приведен ниже. Здесь мы также провели упрощение начальной заготовки по схеме, обсуждавшейся выше:

class CTreeDoc : public CDocument {

//==== Все 3 представления имеют право доступа

//==== к данным документа

friend class CLeftView;

friend class CRightView;

friend class CDrawView;

protected:

virtual ~CTreeDoc ();

CTreeDoc () ;

DECLARE_DYNCREATE(CTreeDoc) public:

//========== Данные документа============

//

CPolygon m_Poly; // Дежурный полигон VECPOLY m_Shapes;

// Контейнер полигонов

// ====== Контейнер имен файлов

vector<CString> m_sFiles;

//====== Размер документа в Page space

CSize m_szDoc;

//== Коэффициент увеличения при переходе World->Page

OINT m_nLogZoom;

//====== Флаг: открыто окно типа CTreeFrame

bool m_bTreeExist;

//=====Флаг: открыто окно типа CDrawFrame

bool m_bDrawExist;

//====== Новые методы класса документ =====//

//====== Поиск нужного представления

CView* GetViewfconst CRuntimeClass* pClass);

//====== Создание нужного представления

bool MakeViewO ;

//====== Преобразование координат World -> Page

CPoint MapToLogPt(CDPointS pt);

//====== Преобразование координат Page -> World



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