- •Лабораторная работа №4 Разработка однооконного Windows-приложения для вывода графической информации.
- •1.Задание на выполнение лабораторной работы
- •2.Порядок выполнения работы
- •3. Методические указания
- •3.3 Выполнение проекта
- •4.Содержание отчета по выполнению лабораторной работы
- •5.Задания на самостоятельную работу при подготовке к лабораторным занятиям
- •6. Перечень используемой литературы
Лабораторная работа №4 Разработка однооконного Windows-приложения для вывода графической информации.
1.Задание на выполнение лабораторной работы
-
В интегрированной среде разработки Microsoft Visual C++ 6.0 создать приложение, которое выводит в окно график функции согласно своему варианту. Кроме графика функции на экран должны быть выведены оси координат с подписями и разметкой по ним и сетка.
Варианты приведены в таблице 1.
Таблица 1
№ варианта |
Формула, определяющая функцию. Y = F(X) |
Диапазон значений X, шаг изменения |
1 |
Y = X |
X = {0 до 9}, шаг 1 |
2 |
Y = 0.5 * X |
X = {0 до 9}, шаг 1 |
3 |
Y = 2 * X +1 |
X = {0 до 9}, шаг 1 |
4 |
Y = X^2 |
X = {0 до 9}, шаг 1 |
5 |
Y = X^2 + 10 |
X = {0 до 9}, шаг 1 |
6 |
Y = X^2 + 5*X + 3 |
X = {0 до 9}, шаг 1 |
7 |
Y = X^3 |
X = {0 до 9}, шаг 1 |
8 |
Y = X^3 + 45 |
X = {0 до 9}, шаг 1 |
9 |
Y=SIN(X) |
X = {0 до 180 град}, шаг 10 град |
10 |
Y=COS(X) |
X = {0 до 180 град}, шаг 10 град |
11 |
Y=TAN(X) |
X = {0 до 80 град}, шаг 10 град |
12 |
Y=X^0.5 |
X = {0 до 9}, шаг 1 |
13 |
Y=e^X |
X = {0 до 9}, шаг 1 |
14 |
Y=SIN(X) + 0.1 |
X = {0 до 180 град}, шаг 10 град |
15 |
Y=COS(X) – 0.1 |
X = {0 до 180 град}, шаг 10 град |
16 |
Y=TAN(X) –2 |
X = {0 до 80 град}, шаг 10 град |
17 |
Y=X^0.5 |
X = {0 до 9}, шаг 1 |
18 |
Y=e^X + 1000 |
X = {0 до 9}, шаг 1 |
19 |
Y=SIN(X) + COS(X) |
X = {0 до 180 град}, шаг 10 град |
20 |
Y = 2^X |
X = {0 до 9}, шаг 1 |
2.Порядок выполнения работы
1. В среде Visual C++ с помощью мастера приложений MFCAppWizard создать шаблон проекта;
2. Открыть окно редактора и ввести текст программы;
4. Отладить программу, последовательно выполняя: компиляцию и исправление синтаксических ошибок, компоновку исполняемой программы и исправление логических ошибок и, наконец, выполнение исполняемой программы;
5. Доказать правильность работы программы.
3. Методические указания
3.1 Создание шаблона проекта с помощью мастера AppWizard.
Создадим шаблон нашего проекта, выполняя следующие действия:
1.В главном меню VC++ выберем пункт File/New и в открывшемся диалоговом окне New(новый) выберем вкладку Project;
2. На вкладке Project(проект) окна New выберем строку MFCAppWizard(exe). В проекте создается приложение, поддерживающее графический интерфейс пользователя, реализованный на основе классов MFC. Результатом выполнения проекта будет исполняемый файл с расширением .EXE. Далее в окне редактирования Project name(имя проекта) окна(панели) New введем с клавиатуры имя нашего проекта, например, LR4. В остальных полях панели New оставим установки по умолчанию. В окне редактирования Location(расположение) можно указать свой маршрут для проекта.
Нажмем кнопку ОК и перейдем в окно MFCAppWizard-Step 1.
3. В появившемся диалоговом окне MFCAppWizard-Step 1 включим радиокнопку Single Document. Уберите галочку с флаговой кнопки Docement/View architecture support. В выпадающем списке What language would you like your resource in выберите Английский[США](APPWZENU.DLL).
Нажмем кнопку Next(следующий).
4. В появившемся диалоговом окне MFCAppWizard-Step 2 of 6 оставим по умолчанию все опции и нажмем кнопку Next.
5. В появившемся диалоговом окне MFCAppWizard-Step 3 of 6 уберите галочку с флаговой кнопки ActiveX Contros остальные оставим по умолчанию и нажмем кнопку Next.
6. В появившемся диалоговом окне MFCAppWizard-Step 4 of 6 уберите все галочки со всех флаговых кнопок остальное оставьте по умолчанию и нажмем кнопку Next.
7. В появившемся диалоговом окне MFCAppWizard-Step 5 of 6 оставьте все по умолчанию и нажмите кнопку Next.
8. В появившемся диалоговом окне MFCAppWizard-Step 6 of 6 оставьте все по умолчанию и нажмите кнопку Finish и в последующем диалоге кнопку Ok.
Cоздание проекта нашего приложения закончено
9. Запустите на выполнение проект. Для этого нажмите на панели инструментов кнопку с восклицательным знаком. VC++ откомпилирует все файлы проекта, скомпонует их в исполняемый файл с расширением EXE и запустит его.
3.2 Вывод графической и текстовой информации в окно.
-
В левой части среды VC++ расположено окно с несколькими вкладками. Перейдите на вкладку ClassView к дереву классов вашего проекта и найдите класс CСhildView. В нем есть функция OnPaint. В тело этой функции вы будете вставлять операторы, которые осуществляют рисование. Весь графический вывод осуществляется в контекст устройства. В функции он уже присутсвует :
CPaintDC dc(this); // device context for painting
-
Остальные объекты и функции, которые вам понадобяться :
1.1 Объект CPen - карандаш
пример объявления :
CPen pen(S_SOLID,2,RGB(0,0,0));
Где в первый аргумент задает стиль линии, второй – толщину, третий – цвет(каждое число – составляющая красного, зеленого и синего цветов). После создания CPen его нужно выбрать в контекст устройства
Пример выбора в контекст устройства.
CPen *pPen = dc.SelectObject(&pen);
После использования карандаша, нужно вернуть в контекст устройства
предидущий карандаш:
dc.SelectObject(pPen);
-
Для отрисовки линии используется пара функций :
dc.MoveTo( X1, Y1); dc.LineTo( X2, Y2 );
рисует линию из точки (x1, y1) в точку (x2, y2).
Обратите внимание, что начало координат у окна находится в левом верхнем углу.
-
Для вывода текста используется функция
dc.TextOut( X1,Y1,”Просто текст” );
Выводит строку “Просто текст” начиная с точки (X1, Y1)
3. Пример простого графического вывода :
struct { int m_nStyle; LPTSTR m_csStyle; } lnStyle[] = { // структура определяющаая тип линии
PS_SOLID, _T("PS_SOLID"),
PS_DASH, _T("PS_DASH"),
PS_DOT, _T("PS_DOT"),
PS_DASHDOT, _T("PS_DASHDOT"),
PS_DASHDOTDOT, _T("PS_DASHDOTDOT"),
PS_NULL, _T("PS_NULL"),
PS_INSIDEFRAME, _T("PS_INSIDEFRAME")
};
//
// чтобы при любом размере шрифта
// текст не налезал друг на друга
// получим характеристики текущего
// шрифта
//
TEXTMETRIC tm;
dc.GetTextMetrics(&tm); // получаем параметры шрифта, используемого для вывода текста
// устанавливаем режим "прозрачного" вывода
dc.SetBkMode(TRANSPARENT);
for (int i = 0; i < sizeof(lnStyle) / sizeof(lnStyle[0]); i++)
{
// будем рисовать разными по стилю карандашами,
// но имеющими единичную толщину и черный цвет
CPen pen(lnStyle[i].m_nStyle, 1, RGB(0, 0, 0));
CPen *pPen = dc.SelectObject(&pen);
// учитываем высоту символов и расстояние между строками
int nY = 10+i*(tm.tmHeight+tm.tmExternalLeading);
dc.TextOut(10, nY, lnStyle[i].m_csStyle); // Вывод текста
dc.MoveTo(200, nY+(tm.tmHeight+tm.tmExternalLeading) / 2); // перемещаем курсор
dc.LineTo(400, nY+(tm.tmHeight+tm.tmExternalLeading) / 2); // рисуем линию
dc.SelectObject(pPen);
}
4. Для хранения значений функции по абсциссе и ординате вам понадобятся 2 вещественных массива. Для формирования значений понадобятся функции из заголовочного файла <math.h>. Обратите внимание, что для тригонометрических функций аргумент задается в радианах.