OneFigure.xyFigCenter = point;

 OneFigure.cType = 'E';

 // Добавляем к массиву, определяющему документ, новый

 // элемент

 pDoc->arrayFig.Add(OneFigure);

 // Вызываем метод OnLButtonDown базового класса CView

 CView::OnLButtonDown(nFlags, point);

}

//////////////////////////////////////////////////////////////

// Метод OnRButtonDown класса CSingleView

// Обрабатывает сообщения правой кнопки мыши

void CSingleView::OnRButtonDown(UINT nFlags, CPoint point) {

 // Получаем указатель на документ (объект класса CSingleDoc)

 CSingleDoc* pDoc = GetDocument();

 // Проверяем указатель pDoc

 ASSERT_VALID(pDoc);

 // Отображаем на экране квадрат

 CClientDC dc(this);

 dc.Rectangle(point.x-10, point.y-10, point.x+10, point.y+10);

 // Сохраняем характеристики квадрата

 CFigure OneFigure;

 OneFigure.xyFigCenter = point;

 OneFigure.cType = 'R';

 // Добавляем к массиву, определяющему документ, новый

 // элемент

 pDoc->arrayFig.Add(OneFigure);

 // Вызываем метод OnRButtonDown базового класса CView

 CView::OnRButtonDown(nFlags, point);

}

Теперь координаты и форма всех нарисованных фигур запоминаются в классе документа. Следующим шагом надо определить, как отображать эти фигуры на экране. Для этого следует внести изменения в метод OnDraw класса окна просмотра CSingleView.

//////////////////////////////////////////////////////////////

// Метод OnDraw класса окна просмотра

void CSingleView::OnDraw(CDC* pDC) {

 CSingleDoc* pDoc = GetDocument();

 ASSERT_VALID(pDoc);

// TODO:

 int i;

 for (i=0; iarrayFig.GetSize(); i++) {

  if (pDoc->arrayFig[i].cType == 'E') pDC->Ellipse(pDoc->arrayFig[i].xyFigCenter.x-10, pDoc->arrayFig[i].xyFigCenter.y-10, pDoc->arrayFig[i].xyFigCenter.x+10, pDoc->arrayFig[i].xyFigCenter.y+10);

  else if (pDoc->arrayFig[i].cType == 'R') pDC->Rectangle(pDoc->arrayFig[i].xyFigCenter.x-10, pDoc->arrayFig[i].xyFigCenter.y-10, pDoc->arrayFig[i].xyFigCenter.x+10, pDoc->arrayFig[i].xyFigCenter.y+10);

 }

}

Постройте проект и запустите полученное приложение. Вы можете свободно изменять размеры окна приложения, перекрывать его окно окнами других приложений, минимизировать и восстанавливать размеры окна. Изображение документа, которое вы нарисуете, не пропадет.

Вы даже можете распечатать нарисованный документ на принтере. А ведь вы не написали для этого не единой строки кода. Перед печатью документа его можно проверить в режиме предварительного просмотра (рис. 5.14). Для этого выберите из меню File строку Print Preview.

Рис. 5.14. Режим предварительного просмотра документа перед печатью

<p>Создание нового документа</p>

Документ, который вы можете создать в приложении Single, можно убрать, только полностью закрыв приложение. Функция создания нового документа не работает. Когда вы выбираете из меню File строку New или нажимаете кнопку , расположенную в панели управления приложения, внешний вид документа не изменяется.

Оказывается, когда пользователь выбирает из меню File строку New, вызывается виртуальный метод OnNewDocument, определенный в классе CDocument. Если вы не переопределите этот метод, то по умолчанию он вызывает метод DeleteContents, и далее помечает его как чистый (пустой). Вы можете переопределить метод OnNewDocument в своем классе документа, чтобы выполнить его инициализацию. Требуется, чтобы вы вызывали из переопределенного метода OnNewDocument, метод OnNewDocument, определенный в базовом классе CDocument.

Перейти на страницу:

Все книги серии Библиотека системного программиста

Похожие книги