Читаем Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT полностью

 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. Режим предварительного просмотра документа перед печатью

Создание нового документа

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

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

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

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

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

Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных