Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование в среде Visual C++ 6. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Рис.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. Вокне редактирования Projet name указать вы­бранное Вами имя приложения, например Diur. Имена приложений следует выбирать как-то осмысленно, чтобы потом удобно было бы ориентироваться среди множества имен других проектов.
Затем вокне location следует указать путь кэтому проек- ту. Здесь уместен будет совет: программы всех приложений Microso Visual C++6 хранить водной какой-то папке, на­пример, впапке сименем Visual или другим похожим име­нем. Тогда при создании следующих приложений можно лег­ко посмотреть приёмы программирования в предыдущих проектах, что значительно упрощает создание программных продуктов. Поэтому перед созданием самого первого прило­жения нужно создать такую папку. Азаписанный единож­ды путь вокне location при создании других проектов будет повторяться.
Выбираем вменю Proects изсписка мастеров пункт MFC AppWizart (.exe) иактивизируем кнопку Ok. Наэкране мо­нитора появится окно, как нарис.8.2. Выбираем пункт Single document, активизируем кнопку Finich, авследующем окне кнопку Ok, имастер MFC AppWizart создаст проект свашим именем. Вокне Workspace будут указаны имена пяти классов:
— Класс CAboutDig— класс диалога.
— Класс CMainFrame— класс окна.
— 54 —
— Класс CDiurApp— класс для созданного приложения
вцелом.
— Класс CDiurDoc— класс документа созданного при-
ложения.
— Класс CDiurView— класс просмотра созданного при-
ложения.
Классы 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 аскройте Diur
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— Diur resources есть пункт Toolbar, а в нём IDR_MAINFRAME. Вызовем на экран мо- нитора окно Properties изакрепим его. Выделим пункт IDR_ MAINFRAME ивокне Properties также заменим английский язык нарусский, как это делали при работе сменю. Напункте IDR_MAINFRAME дважды щёлкнем левой кнопкой мони­тора, инаэкране монитора появится окно, где можно сфор­мировать панель управления. Идва меню для выбора цвета и элементов графики. Если их наэкране нет, воспользуемся меню Tools— Customise— Toolbars, всписке панелей поста- вить «птички» против Gracs иColors.
Сверху окна Diur.rs — IDR_MAINFRAME находится длинная строка схорошо знакомыми начертаниями «иконок», которые можно использовать вбудущей панели управления. Нонам они все не нужны, оставим только две, а остальные удалим путем перемещения их спомощью левой кнопки ма­нипулятора запределы окна.
Выделим первую слева «иконку», в поле редактора эта «иконка» появится в увеличенном размере. Вызовем окно Properties изакрепим его. Вокне Width установим число 40, авокне Height— число 15. Это размеры всех наших «ико­нок». Можно, конечно, создать точечный рисунок нашей «иконки». Но мы поступим проще: вместо рисунка напи­шем слово . Для этого вменю Gracs вовторой строч­ке слева выделим обозначение «резинки» и очистим поле будущей «иконки». Затем в этом же меню выделим пункт сбуквой ивполе «иконки» спомощью клавиатуры введём слово , затем спомощью левой кнопки манипулятора переместим этот текст вцентр иконки. После этого выделим пункт «Прямоугольник» иустановим его слевого нижнего угла доверхнего правого угла. Таким образом, слово 
— 58 —
будет обрамлено чёрным прямоугольником для контрастно­сти. Цвет букв илинии выбирается вменю Colors. Такимже способом создадим вторую «иконку» сословом . Таким образом, панель управления сформирована, вид её показан нарис.8.6.
Рис.8.6 Окно для создания пунктов панель управления
Оставшийся пустой прямоугольник «иконки» предназна­чен для организации дополнительной «иконки», как это было сделано вменю. При работе приложения этих дополнитель­ных элементов наэкране монитора нет.
8.6. Члены-данные класса CDiurDoc
Теперь нужно сформировать наш документ, используя класс документов CDiurDoc. Прежде всего, нужно опре­делить наши идентификаторы. Для этого на названии этого класса в окне Workspase— Classview нужно воздействовать двойным щелчком левой кнопкой манипулятора наназвании класса CDiurDoc, и на экране монитора раскроется файл с описанием компонентов. Находим первое сверху синими символами слово Public: и перейдём на новую следующую
— 59 —
строчку, как это делается вWindows— Word. Вэтой строке напишем спомощью клавиатуры текст:
double a1, a2, x0.xk, y0;
Нетрудно догадаться, что это обозначения коэффициентов, границ интегрирования и начального значения, приведённых взадании пункта 8.2 данного учебного пособия, только вместо индексов обычные строчные символы, так как видентифика­торах индексы недопустимы. Перейдя на следующую новую строчку, введём текст:
int n, nm;
Здесь n— количество интервалов интегрирования, аnm— идентификатор числа, отображающего этапы работы буду­щего нашего приложения. Причём обозначенные идентифи­каторы будут доступны другим классам, втом числе иклассу CDiurView, где будут проведены основные наши расчёты. Это определено статусом памяти public.
Теперь в окне Workspase — Classview слева от класса
CDiurDoc щёлкнем левой кнопкой манипулятора назнак +, и в этом окне появится список членов класса, вклю-
чая наши идентификаторы, ранее введённые иописанные. Вэтом списке щёлкнем левой кнопкой манипулятора наиме­ни члена-функции OnNewDocument (), и на экране мони­тора появится полный текст заготовки этой функции. Это функция выполняется только один раз вначале пуска прило­жения. Здесь мы можем нашим вводимым коэффициентам задать какие-то начальные значения, может быть, отличные от задания. Это необходимо сделать последующей причи­не. Если после запуска готового приложения забудем ввести какой-либо параметр, товячейке памяти этой переменной будет находиться какой-то код отпредыдущей задачи, кото­рый обычно воспринимается как слишком большое число,
— 60 —
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]