Отчёт о лабораторной работе №2 «Разработка приложений с использованием библиотеки mfc» Преподаватель: Романенко С. А




Скачать 418.01 Kb.
НазваниеОтчёт о лабораторной работе №2 «Разработка приложений с использованием библиотеки mfc» Преподаватель: Романенко С. А
страница5/5
Дата публикации07.04.2013
Размер418.01 Kb.
ТипОтчет
odtdocs.ru > Военное дело > Отчет
1   2   3   4   5
^

Индивидуальное задание: перемещаться по контейнеру при помощи клавиатуры


      • необходимо клавишами перемещаться по вершинам графа, подсвечивая их

      • граф — это контейнер, содержащий ребра, которые содержат вершины. При этом каждая вершина может принадлежать нескольким ребрам, а значит, - из нее можно переместиться в несколько других вершин.

      • значит, пользователю необходимо предоставить выбор — в сторону какого ребра двигаться. Это можно сделать также подсветкой выбираемых ребер.

      • для этого опишем метод, обрабатывающий нажатия на клавиши

void CSketcherView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)

{

CClientDC aDC(this);

OnPrepareDC(&aDC);

Iterator<CElement>* iter = GetDocument()->getStaticIterator();

switch(nChar)

{

case 38: // up

// бегаем по ребрам вперед

changeRibble(true, &aDC);

break;

case 40: // down

// бегаем по ребрам назад

changeRibble(false, &aDC);

break;

case 37: // left

break;

case 39: // right

// перемещаемся на новую вершину

if (canProceed(&aDC))

{ // переходим по ребру

_firstVertex = _ribble->getAnotherVertex(_firstVertex);
// подсвечиваем переход

markHighlighted(_firstVertex, aDC);

drawRibble(_ribble, &aDC, GREEN);
// уничтожаем список инцидентных ребер, т.к. перешли на новую вершину

_lastNearestRibbles = NULL;

_ribble = NULL;

}

break;

default:

break;

}

CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);

}



      • добавим в граф функцию поиска ребер, инцидентных заданной вершине

        //итератор по списку инцидентных ребер

ExternalGraphIterator<T>* getNearestRibbles(T* vertex)

      • добавим в CSketcherView атрибуты, сохраняющие текущие положение в графе

        //итератор по инцидентным ребрам текущей вершины m_pSelected

ExternalGraphIterator<CElement>* _lastNearestRibbles;

// ребро для подсветки

Ribble<CElement>* _ribble;

// начальная вершина

CElement* _firstVertex;

      • добавим вспомогательные методы для перемещения по графу

void CSketcherView::changeRibble( bool isNext, CClientDC* aDC )

{

ExternalGraphIterator<CElement>* lastNearestRibbles = refreshNearestRibbles(aDC);

// убираем подсветку с текущего ребра

drawRibble(_ribble, aDC, GREEN);

// двигаемся

if (isNext)

{

if (lastNearestRibbles->hasNext())

{

_ribble = lastNearestRibbles->next();

}

else

{

_ribble = lastNearestRibbles->first();

}

}

else

{

if (lastNearestRibbles->hasPrevious())

{

_ribble = lastNearestRibbles->previous();

}

else

{

_ribble = lastNearestRibbles->last();

}

}

// подсвечиваем новое ребро

drawRibble(_ribble, aDC, SELECT_COLOR);

}
bool CSketcherView::canProceed( CClientDC* aDC )

{

if (_ribble == NULL)

{ // ребра нет - нужно подготовить

//выбираем ребро для перемещения

ExternalGraphIterator<CElement>* lastNearestRibbles = refreshNearestRibbles(aDC);
if (lastNearestRibbles->getGraphRibbleCount() == 0)

{ // начали обход из петли - перейти никуда не можем

AfxMessageBox("Тупик!");

return false;

}

else if (lastNearestRibbles->getGraphRibbleCount() == 1)

{ // ребро всего одно - по нему и переходим

_ribble = lastNearestRibbles->next();

drawRibble(_ribble, aDC, SELECT_COLOR);

return true;

}

else

{ // ребер много - нужно дождаться выбора

return false;

}

}

return true;

}


        ExternalGraphIterator<CElement>* CSketcherView::refreshNearestRibbles( CClientDC* aDC )

{

if (_lastNearestRibbles == NULL)

{

// готовим вершину для начала обхода

if (_firstVertex == NULL)

{ // ничего не выбрано - начинаем обход с первой вершины

Iterator<CElement>* iter = GetDocument()->getNewIterator();

Ribble<CElement>* firstRibble = iter->first();

_firstVertex = firstRibble->get__vertex1();

// вершина подготовлена - можно выбирать инцидентные ей ребра

}

markHighlighted(_firstVertex, *aDC);

_lastNearestRibbles = GetDocument()->getNearestRibbles(_firstVertex);

}

return _lastNearestRibbles;

}

      • это позволит перемещать подсветку по графу:


















  1. Вывод


В ходе лабораторной работы освоены навыки создания приложений типа Model-View-Controller при помощи библиотеки MFC. Освоены способы отрисовки изображений, работы с представлением документа, его сериализации, обработки движения мышью и нажатий клавиш.
1   2   3   4   5

Похожие:

Отчёт о лабораторной работе №3 «Применение протоколов связи приложений...
На Visual Basic for Application написать макрос, который с помощью dde создает новую группу на рабочем столе и в ней новый программный...

Отчёт о лабораторной работе №4 «Разработка экспертной системы с использованием...
Провести создание нечеткой экспертной системы для определения размера чаевых. Провести проверку работы созданной системы

Отчёт о лабораторной работе №3 «Анализ операционных графовых моделей...
Для задачи обработки данных, рассматривавшейся в лабораторных работах 1-2, построить управляющий граф программы с нагруженными дугами,...

Отчет по лабораторной работе «проектирование печатного узла рэа»...
Целью лабораторной работы является разработка конструкторской документации узла рэа по заданной принципиальной схеме

Отчет по лабораторной работе «проектирование печатного узла рэа»...
Целью лабораторной работы является разработка конструкторской документации узла рэа по заданной принципиальной схеме

Отчёт о лабораторной работе №2 «Изучение понятия сопроцессов и виртуальных...
Написать программу, устанавливающую виртуальные связи между тремя сопроцессами на одном процессоре

Отчёт по лабораторной работе на тему «3d графика»
В данной лабораторной работе использовалась программа Autodesk 3ds Max 2009 и Adobe Photoshop cs4

Отчет по лабораторной работе №9 по курсу «компьютерная графика» Студент...
Вариант 28**: Забить пробный гвоздь в тестовую доску (прямоугольную в поперечном сечении)

Отчёт о лабораторной работе №2 «Анализ огм последовательных программ...
Для полученного графа построить соответствующую ему поглощающую цепь Маркова (пцм), определить ее фундаментальную матрицу(ФМ) и вектор...

Отчёт о лабораторной работе №2 «Анализ огм последовательных программ...
Для полученного графа построить соответствующую ему поглощающую цепь Маркова (пцм), определить ее фундаментальную матрицу(ФМ) и вектор...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
odtdocs.ru
Главная страница