Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ISVP_Labs_16_17.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
8 Мб
Скачать
☆

10.Разработка графического редактора

В программе всегда есть еще одна ошибка

Закон Мерфи

Цель работы – освоить программирование меню и панели инструментов для создания пользовательского интерфейса, программирование обработчиков событий от мыши, применение метафайлов Windows для сохранения изображений, создаваемых с помощью средств класса CClientDC (4 час.).

Задание.

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

Приложение должно иметь меню Инструменты (Tools), из которого пользователь сможет выбрать вид фигуры (линия, прямоугольник, произвольная фигура). Кроме того, приложение должно позволять выбрать вид фигуры с помощью кнопок панели инструментов.

Программа должна также позволять «растягивать» фигуру мышью до нужных размеров, как, например, это делается в программе Paint системы Windows. Пользователю также должна быть предоставлена возможность закраски нарисованной фигуры некоторым цветом.

Для того чтобы созданное пользователем изображение восстанавливалось при перекрытии или сворачивании окна программы, программа должна использовать такой прием, как сохранение изображения (нарисованных пользователем фигур) в метафайле Windows (.wmf) и воспроизводить этот файл для восстановления изображения. Кроме того, программа должна позволять открывать (созданные ею) метафайлы Windows и добавлять в них новые фигуры. Идея такой программы почерпнута из работы [1].

10.1.Проектирование программы

Программу целесообразно разделить на две части: первая должна отвечать за взаимодействие с пользователем посредством меню и кнопок, а вторая – за графические операции. Когда пользователь будет выбирать команду меню или нажимать соответствующую кнопку, то мы будем просто устанавливать соответствующие флаги, т.е. значения некоторых переменных. Вторая же часть программы будет проверять значения флагов и собственно рисовать.

Например, если пользователь выбирает из меню команду рисования линий или нажимает соответствующую кнопку на панели инструментов, то флагу bLineFlag присваивается значение true. Если теперь пользователь устанавливает мышь в какую-нибудь позицию окна, нажимает ЛКМ, перемещает мышь и отпускает ЛКМ, то графическая часть программы проверяет значения флагов и определяет, что рисовать следует линию. Таким образом, пользовательский интерфейс программы отделяется от собственно графики.

10.2.Разработка интерфейса

Пользовательский интерфейс состоит из команд меню, кнопок панели инструментов и сообщений мыши, которые будут обрабатываться программой. Если, предположим, капризный пользователь захотел нарисовать прямую линию, он может выбрать команду меню Tools→Line или нажать кнопку Line на инструментальной панели. Выбранная команда меню должна быть помечена «галочкой», а кнопка Line должна перейти в нажатое (выбранное) состояние. Затем пользователь может щелкнуть ЛКМ там, где должна начаться новая линия. Назовем эту точку начальной. Теперь пользователь, удерживая ЛКМ в нажатом состоянии, перетаскивает мышь в конечную точку и отпускает ЛКМ. Программа должна нарисовать линию из начальной точки в конечную. Кроме того, программа должна рисовать линию и в процессе перемещения мыши, так что пользователь как бы «растягивает» линию. После же отпускания ЛКМ линия должна фиксироваться.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]