Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование в среде Visual C++ 6. Учебное пособие
.pdf
Рис.8.3. Экран монитора после создания приложения
— Класс CMainFrame— класс окна.
— Класс CProbaApp— класс для созданного приложе-
ния вцелом.
— Класс CProbaDoc — класс документа созданного
приложения.
— Класс CProbaView — класс просмотра созданного
приложения.
Далее как работать с этими классами и наполнять их
программным продуктом, удобнее рассматривать наконкретном примере. Общие слова быстро забываются, асоздание приложения на конкретной ЭВМ гораздо дольше
помнятся, асоздание других приложений облегчается путём просмотра ранее составленных приложений.
— 51 —

Рис.8.4. Список основных классов приложения
8.2. Выбор задачи
для первого приложения
При выборе задачи приходится руководствоваться тем,
что программный продукт должен быть неслишком объёмным, ноизадача должна быть неочень простой, чтобы показать как можно больше возможностей программируемой
среды Visual C++.
В качестве такого примера рассмотрим численное интегрирование обыкновенного дифференциального уравнения
первого порядка, приводимого ктипу y’=f (x, y) вдиапазоне
x
<=x<=xk сначальным условием y (xo) =yo. Вкачестве метода
o
интегрирования выберем метод Рунге-Кутта. Имеются, конечно, идругие методы, ноони требуют, чтобы были известны несколько начальных точек, которые всё равно приходится искать методом Рунге-Кутта.
— 52 —

Этот метод хорошо описан в книге [4], С. 309. Метод
6
1
ko
xxx ≤≤
),( yxff =
i
k
i
xx =iyy =
),(1yxff =11* fhk =
2
k
),(2yxff =22* fhk =
),(3yxff =33* fhk =
hxx
i
+=
3
kyy
i
+=
).(4yxff =44* fhk =
2
h
2
h
2
k
заключается втом, что интервал интегрирования делится
наn частей размером h= (x
ле приращение y рассчитывается в четыре приёма, как
втаблице 8.1.
-
– xo) /n. Накаждом интерва-
k
8.1
x y
xx
+=
i
xx
+=
i
Выберем конкретный тип дифференциального уравнения
первого порядка; y’=a
иначальным значением y(x0)=y0. Численные значения выберем следующие: a
интервалов интегрирование выберем n = 20. Если этого числа
будет мало из-за точности интегрирования, его можно потом
увеличить.
yy
yy
i
1
+=
i
2
+=
i
)22(
kkkky
+++=∆
y2ex+a2y с интервалом интегрирования
1
=1; a2=-2; x0=0; xk=1; y0=1. Число
1
.
4321
— 53 —

Далее рекомендуется все дальнейшие описанные действия
повторять насвоём компьютере с целью лучшего освоения
программирования.
8.3. Создание приложения
Запускаем обычным способом программу Microso
Visual C++6. На экране монитора появится окно, как
нарис.8.1. Вокне редактирования Projet name указать выбранное Вами имя приложения, например Diur. Имена
приложений следует выбирать как-то осмысленно, чтобы
потом удобно было бы ориентироваться среди множества
имен других проектов.
Затем вокне location следует указать путь кэтому проек-
ту. Здесь уместен будет совет: программы всех приложений
Microso Visual C++6 хранить водной какой-то папке, например, впапке сименем Visual или другим похожим именем. Тогда при создании следующих приложений можно легко посмотреть приёмы программирования в предыдущих
проектах, что значительно упрощает создание программных
продуктов. Поэтому перед созданием самого первого приложения нужно создать такую папку. Азаписанный единожды путь вокне location при создании других проектов будет
повторяться.
Выбираем вменю Proects изсписка мастеров пункт MFC
AppWizart (.exe) иактивизируем кнопку Ok. Наэкране монитора появится окно, как нарис.8.2. Выбираем пункт Single
document, активизируем кнопку Finich, авследующем окне
кнопку Ok, имастер MFC AppWizart создаст проект свашим
именем. Вокне Workspace будут указаны имена пяти классов:
— Класс CAboutDig— класс диалога.
— Класс CMainFrame— класс окна.
— 54 —

— Класс CDiurApp— класс для созданного приложения
вцелом.
— Класс CDiurDoc— класс документа созданного при-
ложения.
— Класс CDiurView— класс просмотра созданного при-
ложения.
Классы CAboutDig и CDiffurApp не трогайте, а вот
вклассе MainFrame Вы найдёте функцию PreGreateWindow.
Выделите название этой функции инажмите левую кнопку манипулятора. На экране монитора появится листинг
этой функции. Она очень короткая, ивстроку после строк
комментария вставьте 4 оператора типа:
cs.cx=1000;
cs.cy=800;
cs.x=00;
cs.y=00.
Здесь cs.cx=1000; означает, что размер монитора погоризонтали выбран как 1000 пикселей, аcs.cy=800; означает,
что размер монитора повертикали выбран как 800. Последние две строки показывают, что координаты самого верхнего левого угла приняты нулевыми. Вследующих проектах эти четыре оператора можно просто скопировать.
8.4. Меню
Начнём разработку приложения с оформления меню.
В окне Workspace во вкладке Resours аскройте Diur
resources, появится список доступных ресурсов, выберем
Menu, а затем IDR_MAINFRAME. Это заготовка для созда-
ния своего меню. Для начала пункты меню переведём нарусский язык, сэтой целью выведем наэкран окно Properties любым издвух способов. Либо через меню View— Properties,
— 55 —

либо на свободном поле Workspace нажать правую кнопку
манипулятора илевую кнопку напункт Properties. Наэкране
появится окно Properties. Влевом верхнем углу нужно левой
кнопкой манипулятора отметить изображение канцелярской
кнопки, чтобы закрепить это окно наэкране монитора. Теперь
выделим пункт IDR_MAINFRAME ивокне свойств выберем
русский язык (Russian). Теперь пункты меню санглийского
языка можно заменить русскими названиями. Для этого сначала дважды щёлкнуть левой кнопкой манипулятора напункте IDR_MAINFRAME. Наэкране монитора появится окно
сизображением будущего меню.
Выделим пункт меню File, ивокне свойств наполе Caption
заменим File на. Раскроим этот пункт, появится список
подпунктов, изкоторых нам понадобится только один Exit—
завершение работы нашего приложения. Выделим этот пункт,
и в окне Caption панели свойств заменим Exit на .
Остальные подпункты можно просто удалить: левой кнопкой
манипулятора выделить инажать клавишу Delete клавиатуры.
Теперь выделим пункт меню Edit — редактирование.
Ноэто длинное слово, заменим более коротким— , тем
более что нам эта операция нужна для ввода цифровых данных. Раскроим это пункт, извсех подпунктов оставим один
ипереименуем его тоже вимя . Остальные подпункты
удалим как подпункты меню .
Теперь выделим пункт меню View— Окно изаменим слово View на. Раскроим это пункт итакже оставим только один подпункт, переименуем его на. Этим пунктом
будем пользоваться поокончании ввода данных для запуска
части приложения— начала интегрирования.
Затем пункт мню Help заменим на. Вэтом пункте только один подпункт, заменим имя его на.
— 56 —

Иврезультате всех проведённых действий мы получим вид
меню, как нарис.8.5.
Рис.8.5. Меню приложения
Собственно, мы получили пока скелет меню, кроме пунктов
и , ниодин пункт воткомпилированной
программе ещё работать небудет. Как оживить меню, рассмотрим ниже. Впринципе при разработке других программных
продуктов можно ввести дополнительные пункты меню Для
этого в строке меню есть незаполненный прямоугольник,
который можно занять под пункт меню. Появится новый такойже пустой прямоугольник, который можно занять новым
пунктом меню, итак далее.
8.5. Панель управления (инструментов)
Хорошим тоном программиста является наличие, кроме
меню, панели управления, дублирующей действия пунктов
иподпунктов Меню, хотя иможно обойтись без упомянутой
панели управления. Собственно говоря, нам нужно дублировать работу двух подпунктов: и.
— 57 —

В окне Workspace— Resours— Diur resources есть пункт
Toolbar, а в нём IDR_MAINFRAME. Вызовем на экран мо-
нитора окно Properties изакрепим его. Выделим пункт IDR_
MAINFRAME ивокне Properties также заменим английский
язык нарусский, как это делали при работе сменю. Напункте
IDR_MAINFRAME дважды щёлкнем левой кнопкой монитора, инаэкране монитора появится окно, где можно сформировать панель управления. Идва меню для выбора цвета
и элементов графики. Если их наэкране нет, воспользуемся
меню Tools— Customise— Toolbars, всписке панелей поста-
вить «птички» против Gracs иColors.
Сверху окна Diur.rs — IDR_MAINFRAME находится
длинная строка схорошо знакомыми начертаниями «иконок»,
которые можно использовать вбудущей панели управления.
Нонам они все не нужны, оставим только две, а остальные
удалим путем перемещения их спомощью левой кнопки манипулятора запределы окна.
Выделим первую слева «иконку», в поле редактора эта
«иконка» появится в увеличенном размере. Вызовем окно
Properties изакрепим его. Вокне Width установим число 40,
авокне Height— число 15. Это размеры всех наших «иконок». Можно, конечно, создать точечный рисунок нашей
«иконки». Но мы поступим проще: вместо рисунка напишем слово . Для этого вменю Gracs вовторой строчке слева выделим обозначение «резинки» и очистим поле
будущей «иконки». Затем в этом же меню выделим пункт
сбуквой ивполе «иконки» спомощью клавиатуры введём
слово , затем спомощью левой кнопки манипулятора
переместим этот текст вцентр иконки. После этого выделим
пункт «Прямоугольник» иустановим его слевого нижнего
угла доверхнего правого угла. Таким образом, слово
— 58 —

будет обрамлено чёрным прямоугольником для контрастности. Цвет букв илинии выбирается вменю Colors. Такимже
способом создадим вторую «иконку» сословом . Таким
образом, панель управления сформирована, вид её показан
нарис.8.6.
Рис.8.6 Окно для создания пунктов панель управления
Оставшийся пустой прямоугольник «иконки» предназначен для организации дополнительной «иконки», как это было
сделано вменю. При работе приложения этих дополнительных элементов наэкране монитора нет.
8.6. Члены-данные класса CDiurDoc
Теперь нужно сформировать наш документ, используя
класс документов CDiurDoc. Прежде всего, нужно определить наши идентификаторы. Для этого на названии этого
класса в окне Workspase— Classview нужно воздействовать
двойным щелчком левой кнопкой манипулятора наназвании
класса CDiurDoc, и на экране монитора раскроется файл
с описанием компонентов. Находим первое сверху синими
символами слово Public: и перейдём на новую следующую
— 59 —

строчку, как это делается вWindows— Word. Вэтой строке
напишем спомощью клавиатуры текст:
double a1, a2, x0.xk, y0;
Нетрудно догадаться, что это обозначения коэффициентов,
границ интегрирования и начального значения, приведённых
взадании пункта 8.2 данного учебного пособия, только вместо
индексов обычные строчные символы, так как видентификаторах индексы недопустимы. Перейдя на следующую новую
строчку, введём текст:
int n, nm;
Здесь n— количество интервалов интегрирования, аnm—
идентификатор числа, отображающего этапы работы будущего нашего приложения. Причём обозначенные идентификаторы будут доступны другим классам, втом числе иклассу
CDiurView, где будут проведены основные наши расчёты. Это
определено статусом памяти public.
Теперь в окне Workspase — Classview слева от класса
CDiurDoc щёлкнем левой кнопкой манипулятора назнак
+, и в этом окне появится список членов класса, вклю-
чая наши идентификаторы, ранее введённые иописанные.
Вэтом списке щёлкнем левой кнопкой манипулятора наимени члена-функции OnNewDocument (), и на экране монитора появится полный текст заготовки этой функции. Это
функция выполняется только один раз вначале пуска приложения. Здесь мы можем нашим вводимым коэффициентам
задать какие-то начальные значения, может быть, отличные
от задания. Это необходимо сделать последующей причине. Если после запуска готового приложения забудем ввести
какой-либо параметр, товячейке памяти этой переменной
будет находиться какой-то код отпредыдущей задачи, который обычно воспринимается как слишком большое число,
— 60 —
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
