Класс для нового представления документа
При создании второго шаблона документов мы определили новую комбинацию классов, которые будут поддерживать функционирование окон нового типа. Клиентской областью этих окон будет управлять класс CDrawView, к созданию которого мы и приступаем.
- Поставьте фокус на элемент Tree дерева классов в окне Class View, вызовите контекстное меню и выберите команду Add › Add Class.
- В окне появившегося диалога выберите категорию MFC, шаблон MFC Class и нажмите кнопку Open.
- В окне MFC Class Wizard задайте имя класса CDrawView и выберите класс CView в списке Base Class.
- Нажмите кнопку Finish.
Примечание
Среди классов списка Base Class теперь есть класс CObject. Как ни странно, но в Visual Studio 6 вы не могли бы рассчитывать на помощь ClassWizard при создании класса, производного от CObject.
В папке проекта появились еще два файла (DrawView.h и DrawView.cpp), которые были автоматически включены в состав проекта. Класс приложения должен их видеть, поэтому вставьте в конец списка директив #include файла Тгее.срр еще одну:
#include "DrawView.h"
Внесите изменения в интерфейс класса, так чтобы он стал:
#pragma once class CTreeDoc; // Упреждающее объявление class CDrawView: public CView { DECLARE_DYNCREATE(CDrawView) protected: CSize m_szView; // Размеры клиетской области окна bool m_bNewPoints; // Флаг режима вставки новых точек bool m_bReady; // Флаг готовности захвата вершины bool m_bLock; // Флаг захвата вершины int m_CurID; // Индекс полигона в массиве HCURSOR m_hGrab; // Курсор захвата CPen m_penLine; // Перо для изображения контура CDrawView(); virtual ~CDrawView(); public: CTreeDoc* GetDocument() { return dynamic_cast<CTreeDoc*>(m_pDocument); } virtual void OnDraw(CDC* pDC); //====== Настройка контекста устройства void SetDC(CDC* pDC); //====== Перерисовка контура void RedrawLines (CDC *pDC, CPointS point); DECLARE_MESSAGE_MAP() };
Так как мы ввели в класс новый метод GetDocument и тут же дали коды его реализации, то класс CTreeDoc должен быть известен компилятору до того, как он познакомится с классом CDrawView. Вставьте строку с директивой включения файла заголовков:
#include "TreeDoc.h"
В список директив файла DrawView.cpp до строки, подключающей файл DrawView.h. Класс нового представления старого документа имеет простое назначение: изобразить в центре своего окна дежурный полигон m_Poly, имеющийся в составе документа. Для упрощения этой задачи мы ввели в класс переменную CSize m_szView, которая будет хранить текущие размеры клиентской области окна. Несколько позже мы дадим коды методов визуального редактирования. Эти методы используют параметры текущего состояния, которые надо инициализировать в конструкторе класса.
Откройте файл с кодами реализации класса (DrawView.cpp) и измените конструктор и функцию перерисовки OnDraw:
CDrawView::CDrawView() { //====== Все режимы редактирования выключены m_bNewPoints = false; m_bReady = false; m_bLock = false; m_CurID = – 1; } void CDrawView::OnDraw(CDC* pDC) { CTreeDoc* pDoc = GetDocument (); { //====== Настройка контекста устройства SetDC(pDC); //====== Если вершина перемещается, //====== рисуем без заливки внутренних областей, pDoc › m_Poly.Draw(pDC, m_bLock); }