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


Класс для нового представления документа - часть 2


Вставьте строку с директивой включения файла заголовков

#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) ;

}

В режиме редактирования полигон рисуется без заливки внутренних областей, а в обычном режиме просмотра — с заливкой. Режим выбирает пользователь, а переменная m_bLock следит за тем, какой режим выбран. Настройка контекста устройства определяет трансформацию изображения: увеличение и сдвиг, по формуле, обсуждавшейся в уроке 2. Метод Setoc позволяет учесть текущие размеры окна:

void CDrawView: :SetDC(CDC* pDC)

{

CTreeDoc* pDoc = GetDocument ();

//====== Режим преобразования без искажений пропорций

pDC->SetMapMode (MM_ISOTROPIC) ;

//======Размеры логического окна хранит документ

pDC->SetWindowExt (pDoc->m_szDoc) ;

pDC->SetWindowOrg (pDoc->m_szDoc.cx/2, pDoc->m_szDoc.cy/2) ;

//====== Размеры физического окна хранит представление

pDC->SetViewportExt (m_szView.cx, -m_szView. су) ;

pDC->SetViewportOrg (m_szView.cx/2,.


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