Создание простейшего графического редактора (Лабораторная работа № 20 по VisualC++ 2005)

Страницы работы

Содержание работы

Лабораторная работа №20 по VisualC++ 2005

"Создание простейшего графического редактора"

1 Постановка задачи

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

В меню TOOLS включить пункты рисования:  Draw freehand (рисование произвольной фигуры), Line, Rectangle, Ellipse, Fill figure (закрашивание замкнутой области). В панель инструментов добавить соответствующие  этим пунктам меню кнопки.

Если выбран пункт меню Line, то соответствующая кнопка  панели инструментов должна быть утоплена. Если нажать кнопку Line, то против пункта меню Line должна появиться  «галочка».

При  рисовании нажатие мышки определяет начальную точку, а при отпускании – конечную. При отпускании – рисуется соответствующая фигура.  

          Предусмотреть перемещение фигур и их «растяжение» с помощью мышки.

2 Общие указания

1) Создать однодокументную (SDI) программу graf_painter.

2)  Каждой фигуре поставить в соответствие флаг: bool bDrawFlag,  

bool  bLineFlag и т.д.

Для выбранной фигуры флаг из   первоначального false будет переводиться  в true .

Кроме флагов предусмотреть переменные: CPoint Anchor; //начальная точка

                                         Cpoint DrawTo; //конечная точка.

                                         Cpoint OldPoint ;//предыдущая точка

          Ввести их в качестве элементов данных  в класс Cgraf_painterView с доступом  protected.

3)  В класс Cgraf_painterView также добавить метод MakeAllFlagsFalse().

В нем все пять флагов следует установить в  false. Этот метод вызывать из конструктора класса

Cgraf_painterView::Cgraf_painterView()   

                     {

    MakeAllFlagsFalse( );

                      }

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

4) Вызвать редактор меню и добавить пункт меню Tools. Включить в него пять подпунктов: Draw freehand, Line, Rectangle, Ellipse, Fill figure.

5)Добавить в панель инструментов соответствующие подпунктам меню кнопки.

6) Связать кнопки с пунктами меню. Для этого необходимо, находясь в  редакторе панели инструментов, щелкнуть дважды на кнопке Line. В появившемся  окне properties выбрать  окно ID и щелкнуть на нем. Из раскрывшегося списка  выбрать  ID_TOOLS_LINE. Это идентификатор  меню Line.  Таким образом, кнопка  Line связывается  с соответствующим пунктом меню.

          Ниже в поле prompt следует ввести Line\nLine. Это означает, что когда пользователь задержит указатель мыши над данной кнопкой, в строке состояния появится текст Line. Кроме того, текст за символом \n будет выведен в качестве экранной подсказки возле кнопки.

Эти же операции проделать и с другими  добавленными кнопками.

7) Создать обработчики для всех пяти подпунктов меню Tools.

 В каждом из них сначала вызвать метод MakeAllFlagsFalse() а затем присвоить соответствующему флагу значение true. Ниже приводится обработчик для Line.

void Cgraf_painterView::OnToolsLine()

{

    MakeAllFlagsFalse();

    bLineFlag=true;

    // TODO: Add your command handler code here

}

Так осуществляется связывание флагов со средствами пользовательского интерфейса.

8) Пометить команды меню.

Перед отображением меню программа вызывает для каждой команды  специальный метод обновления пользовательского интерфейса, в котором можно установить пометку для команды, соответствующей активному режиму рисования. Для этого нужно выделить пункт меню, например Line, вызвать правой кнопкой контекстное меню, а в нем-  Add Event Handler.  В появившемся окне теперь выбирать не COMMAND, а UPDATE_COMMAND_UI, а в списке Class list – Cgraf_painterView.

Следить ! Сначала выбирать класс, а затем команду. Иначе может иметь место самопроизвольный переход  на COMMAND.      

В каждый обработчик включить метод  Setcheck ( имя__флага).

Помимо пометки команд активного режима в меню Tools, эти методы также заставляют выглядеть соответствующую кнопку на панели инструментов «нажатой».

 Ниже приведен пример для пункта меню Line.

void Cgraf_painterView::OnUpdateToolsLine(CCmdUI *pCmdUI)

{

    pCmdUI->SetCheck(bLineFlag);

    // TODO: Add your command update UI handler code here

}

9) Обработать сообщение о нажатии кнопки мыши.

Нажатие левой кнопки мыши задает начальную точку для рисования фигуры.

Создать обработчик события- нажатия этой кнопки.

Для этого выбрать Cgraf_painterView, вызвать контекстное меню->properties->messages. В появившемся списке выбрать WM_LBUTTONDOWN. Щелкнуть по нем. Появится <Add>OnLButtonDown. Ещё раз щелкнуть, что приведет к появлению обработчика.

Следует обратить внимание на то, что формальный параметр CPoint point- это координаты текущей точки,  над которой находится мышь. Нам осталось лишь присвоить эти координаты точке Anchor , с которой начнется рисование фигуры.

void Cgraf_painterView::OnLButtonDown(UINT nFlags, CPoint point)

{

Anchor.x=point.x;

Anchor.y=point.y;

    // TODO: Add your message handler code here and/or call default

    CView::OnLButtonDown(nFlags, point);

Похожие материалы

Информация о работе

Тип:
Методические указания и пособия
Размер файла:
107 Kb
Скачали:
0