Контроль качества выполненной работы
В программе количество «магических» чисел должно быть сведено к минимуму. Это значит, что программный код вида
int Mas[100];
//...
for(int i=0; i<100; i++) Mas[i]=0;
допустим только для программистов с сильно ограниченными умственными способностями, а все другие программисты должны поступать так (или еще изящнее)
const int Max=100;
int Mas[Max];
//...
for(int i=0; i<Max; i++) Mas[i]=0;
Все функции (и хвункции тоже) все необходимые данные должны получать в качестве параметров. Это значит, что фрагмент программы
const int Max=100;
int i;
int Mas[Max];
Void BadFunc()
{
for(i=0; i<Max; i++) Mas[i]=0;
//...
}
//...
BadFunc();
следует считать дебильным и он должен быть переписан примерно так
const int Max=100;
int i;
int Mas[Max];
bool GoodFunc( int Mas[], int NMax)
{
if(NMax<1) return false;
for(int i=0; i<NMax; i++) Mas[i]=0;
//...
}
//...
If(GoodFunc(SomeVec,N)) //...
//...
Приложение с окном вида
Плохо спроектированная программа требует в три раза больше времени, чем предполагалось; тщательно спроектированная - только в два раза
Закон Мерфи
Цель работы – освоить разработку приложения с графическим интерфейсом, основанного на классе «вид» библиотеки MFC (4 час.).
Задание.
1. Внимательно изучите материал разделов «Каркас приложений MFC» и «Класс вид библиотеки MFC (версия MVS 2005)» в файле VC_Lect.doc. В данной части используемые нами свойства и возможности MVS 2010 практически ничем не отличаются от MVS 2005.
2. Разработайте приложение в соответствии с рекомендациями, приведенными в разделе «Класс вид библиотеки MFC (версия MVS 2005)». Тестируйте приложение, добейтесь его работоспособности.
|
|
3. Добавьте в разработанное приложение программный код, который будет читать из файла данные о положении и размерах нескольких геометрических фигур и изображать эти фигуры в окне вида. Для получения представления о том, как можно выводить графические изображения в Windows, проработайте раздел конспекта «Интерфейс графического устройства, цвет и шрифт».
4. Выполните отладку приложения, проанализируйте его работу при изменении размеров окна приложения.
Методические указания.
Шаг 1. Создание приложения с окном представления.
Выполните два первых пункта задания, добейтесь работоспособности приложения DRW.
Кстати, если вы хотите задать собственное название окна приложения и/или установить размер и положение окна приложения, см. в [3] подраздел 24.4 «Установка размеров и положения главного окна-рамки приложения».
Шаг 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(), не содержащей, пока, никакого кода.
Дата добавления: 2018-02-18; просмотров: 559; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!