- •Министерство образования рф
- •Отчет по лабораторной работе №2 «Разработка приложений с использованием библиотеки mfc»
- •Найти проекты mfc Tutorial. Откомпилировать и выполнить пример Sketcher01.
- •Откомпилировать и выполнить пример Sketcher02.
- •3.Откомпилировать и выполнить пример Sketcher03.
- •Откомпилировать и выполнить пример Sketcher04.
- •Откомпилировать и выполнить пример Sketcher05.
Министерство образования рф
Санкт-Петербургский государственный электротехнический Университет «ЛЭТИ»
кафедра математического обеспечения ЭВМ
Отчет по лабораторной работе №2 «Разработка приложений с использованием библиотеки mfc»
по дисциплине «Объектно-ориентированные технологии разработки программного обеспечения»
Выполнил: студент гр. 3341 Рыжок М.
Проверил: доцент Спицын А.В.
Санкт-Петербург, 2007
-
Найти проекты mfc Tutorial. Откомпилировать и выполнить пример Sketcher01.
-
Структура классов проекта. Программа состоит из четырех основных частей: объект приложения, объект главного окна, объект вида и объект документа. В случае многооконного приложения, есть еще объект подчиненного окна.
-
Объект приложения находится в файлах part21.h и part21.cpp. это то, что windows запускает при старте программы. Когда объект начинает работу, он размещает на экране главное окно.
-
Объект главного окна отображает на экране саму программу. В нем находится меню, панель инструментов, заголовок окна. Находится в файлах MainFrm.h и MainFrm.cpp.
-
Объект вида предназначен для работы с клиентской областью-местом, где обычно отображаются в соответствующем формате данные программы. Объект вида находится в файлах lab22.View.h и lab22View.cpp.
-
В объекте документа хранятся данные программы.
-
Программы для Windows управляются событиями. При наступлении любого из событий в программе вызывается соответствующий метод. Например при выборе фигуры из списка вызываются методы OnUpdateElements и OnElements. Методы OnUpdateElements отвечает за изменение пользовательского интерфейса. В программе в этом методе ставится, либо снимается галочка. Методы OnElements описывают собственно реакцию программы на сообщение. В программе задается значение константы c_TypeName, соответствующее нужному типу фигуры.
-
В программу также добавлены методы обработки событий по перемещению мыши, нажатию левой и правой кнопок мыши, нажатию клавиш, открытие окна просмотра контейнера. Эти сообщения обрабатываются в объекте вида.
-
Откомпилировать и выполнить пример 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