Скачиваний:
18
Добавлен:
01.05.2014
Размер:
780.8 Кб
Скачать

Министерство образования рф

Санкт-Петербургский государственный электротехнический Университет «ЛЭТИ»

кафедра математического обеспечения ЭВМ

Отчет по лабораторной работе №2 «Разработка приложений с использованием библиотеки mfc»

по дисциплине «Объектно-ориентированные технологии разработки программного обеспечения»

Выполнил: студент гр. 3341 Рыжок М.

Проверил: доцент Спицын А.В.

Санкт-Петербург, 2007

  1. Найти проекты mfc Tutorial. Откомпилировать и выполнить пример Sketcher01.

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

    • Объект приложения находится в файлах part21.h и part21.cpp. это то, что windows запускает при старте программы. Когда объект начинает работу, он размещает на экране главное окно.

    • Объект главного окна отображает на экране саму программу. В нем находится меню, панель инструментов, заголовок окна. Находится в файлах MainFrm.h и MainFrm.cpp.

    • Объект вида предназначен для работы с клиентской областью-местом, где обычно отображаются в соответствующем формате данные программы. Объект вида находится в файлах lab22.View.h и lab22View.cpp.

    • В объекте документа хранятся данные программы.

  • Программы для Windows управляются событиями. При наступлении любого из событий в программе вызывается соответствующий метод. Например при выборе фигуры из списка вызываются методы OnUpdateElements и OnElements. Методы OnUpdateElements отвечает за изменение пользовательского интерфейса. В программе в этом методе ставится, либо снимается галочка. Методы OnElements описывают собственно реакцию программы на сообщение. В программе задается значение константы c_TypeName, соответствующее нужному типу фигуры.

  • В программу также добавлены методы обработки событий по перемещению мыши, нажатию левой и правой кнопок мыши, нажатию клавиш, открытие окна просмотра контейнера. Эти сообщения обрабатываются в объекте вида.

  1. Откомпилировать и выполнить пример Sketcher02.

  • Выполнил программу по шагам, установив контрольные точки в операциях с мышью и клавиатурой.

  • В конструкторе CPart2_1App::InitInstance() установил позицию появления окна в центре экрана. Размеры главного окна задаются в методе CMainFrame::PreCreateWindow, и размеры подчиненного окна в методе CChildFrame::PreCreateWindow. В рабочей области подчиненного окна установлен курсор. Подключение курсора в методе CChildFrame::OnSetCursor.

  • В базовый класс Shape добавлено объявление метода Draw, определение этого метода свое в каждом из классов фигур. Все фигуры были разделены на две группы: без текста и с текстом. Фигуры без текста рисуются при нажатии левой кнопки мыши на пустом месте рабочей области, и добавляются в контейнер в момент отпускания левой кнопки мыши. Для фигур с текстом, вначале рисуется нетекстовая часть объекта, затем устанавливается курсор в нужную позицию и текст вводится пока не нажата клавиша “пробел”.

Например, определение метода Draw для класса CEllipse

void CEllipse ::Draw(CDC* pDC, Shape* figure,bool doLine)

{

CPen aPen;

COLORREF aColor=RGB(0,0,0);

if(this == figure)

aColor = RGB(255,0,0);

if (doLine)

{ aColor = RGB(0,255,0);}

if(!aPen.CreatePen(PS_SOLID, 1, aColor))

{ AfxMessageBox("Pen creation failed drawing a rectangle", MB_OK);

AfxAbort(); }

CPen* pOldPen = pDC->SelectObject(&aPen);

CPoint Start(GetX(),GetY());

CPoint End(GetX()+2*GetXRad(),GetY()+2*GetYRad());

CRect m_EnclosingRect(Start, End);

m_EnclosingRect.NormalizeRect();

pDC->Ellipse(m_EnclosingRect);

pDC->SelectObject(pOldPen);

}

Определение метода Draw для класса CText

void CText::Draw(CDC* pDC, Shape* figure,bool doLine)

{

COLORREF aColor=RGB(0,0,0);

if(this == figure)

{aColor = RGB(255,0,0);}

if (doLine)

{

aColor = RGB(0,255,0);

}

pDC->SetTextColor(aColor);

pDC->TextOut(GetX(),GetY(),GetStr());

Width=pDC->GetTextExtent(GetStr()).cx;

}

Результат работы программы представлен на рисунке 1