Контроль качества выполненной работы



В программе количество «магических» чисел должно быть сведено к минимуму. Это значит, что программный код вида

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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!