Шаг 2. Рисование в окне вида.
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Рисование в программах на C++ в ОС Windows с использованием стандартных GDI-объектов может показаться несколько непростым делом, но и с ним можно разобраться. В этом может помочь, например, работа [1].

В качестве примера и прототипа приведем текст функции OnDraw(), которая выводит изображение, приведенное на рис. 1. Для примера см. приложение DRW.exe.

 

 

Рисунок 1. Пример рисования объектов в окне программы

 

Некоторые комментарии к приведенному ниже тексту функции CDRWView::OnDraw().

Класс CRect предназначен для хранения координат прямоугольной области и выполнения над ними часто употребляемых операций. Основными член-данными этого класса являются координаты углов прямоугольника: left, top, right и bottom.

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

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

Макрос RGB позволяет “сочинить” свой цвет, указав три его составляющие (Red, Green, Blue), каждая из которых должна находиться, естественно, в диапазоне от 0 до 255.

 

Наберите текст функции OnDraw() и поэкспериментируйте с программой.

 

 

Шаг 3. Создание обработчика команды File→Open.

Где открывать и читать файл?

В данном приложении код рисования размещается в функции OnDraw() класса «вид». А где целесообразно открывать файл, читать из него данные и на их основе выполнять рисование фигур? Если все эти действия поместить в функцию OnDraw(), то тогда всякий раз при перерисовке окна программы файл будет повторно открываться, повторно читаться и т.д., что, естественно, нецелесообразно. В принципе, в соответствии с принятой в MFC архитектурой «документ-вид», файл надо было бы открывать и читать из него данные в классе «документ», а уже оттуда передавать эти данные в класс «вид». Это несколько сложновато, как для начала. Поэтому в данной работе мы не будем следовать этой методике и поступим проще.

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

 

Замечание. Так как при работе в среде Visual C++ довольно проблематично выполнять «откаты», то, по крайней мере на первых порах, я рекомендую время от времени выполнять резервное копирование файлов проекта с тем, чтобы легче было исправить ошибку.

 

Обработчик команды меню приложения File→Open проще всего создать следующим образом:

· вызовите или выберите окно Class View из меню View;

· в списке классов выберите CDRWView (предполагается, что приложение Вы назвали DRW);

· вызовите окно свойств (Properties) с помощью команды Alt+Enter (эту команду можно найти, если постараться, в меню View);

· в окне Properties выберите вкладку Events (рис. 2) с помощью кнопаря  и на этой вкладке выберите идентификатор ресурса ID_FILE_OPEN и в поле ввода COMMAND выберите имя функции OnFileOpen().

 

В результате этих воистину героических усилий мастер должен создать заготовку функции CDRWView::OnFileOpen(), не содержащей, пока, никакого кода.

 


Дата: 2019-07-30, просмотров: 221.