Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПро - методичка.pdf
Скачиваний:
32
Добавлен:
16.03.2016
Размер:
847.14 Кб
Скачать

21.Что такое «быстрые клавиши»?

22.Каким образом создаются окна диалога?

23.Объясните отличия модального окна.

2 КОНТЕКСТЫ УСТРОЙСТВ. ВЫВОД ТЕКСТА И ГРАФИКИ.

2.1 Цель работы

Ознакомление с концепцией контекстного представления устройств в современных операционных системах, получение практических навыков по составлению, написанию и отладке программ, осуществляющих аппаратнонезависимый вывод информации на экран дисплея, принтеры, и другие периферийные устройства, представленные контекстами.

Ознакомление с концепцией и элементами графического интерфейса пользователя (GUI), принципами формирования графики на растровом экране дисплея, получение практических навыков по составлению, написанию и отладке программ, осуществляющих графический вывод текста, точечной и векторной графики.

2.2 Указания по подготовке к выполнению лабораторной работы

Необходимо освоить основные принципы контекстной концепции представления устройств вывода информации, структуру данных контекстов, а также порядок использования основных фулнкций работы с контекстами устройств. Необходимо изучить концепцию графического интерфейса устройства (GDI), его структуру, основные типы функций и примитивов GDI, структуру информации о цветах, атрибутах, шрифтах контекста устройств, принципы их формирования и изменения.

При подготовке к работе необходимо изучить конспект лекций по указанной теме, методические указания, а также разделы, указанные в [16, c.57-62], [17, c.28-32], [16, c.94-247], [17, c.19-32].

2.3 Обзор темы работы

Контекст устройства фактически является структурой данных, которая внутренне поддерживается GUI. Контекст устройства связан с конкретным устройством вывода информации, таким как дисплей, принтер, плоттер. Некоторые значения в контексте устройства являются графическими "атрибутами", которые определяют некоторые особенности работы функций рисования. Например, для функции TextOut, эти атрибуты задают цвет текста, цвет фона, положение в окне при выводе и т.п.

Перед осуществлением вывода, программа должна получить описатель контекста, все операции по выводу осуществлять с использованием описателя контекста, после чего, программа должна освободить описатель контекста.

Вданной работе необходимо использовать следующие функции API: BeginPaint или GetDC для получения описателя контекста устройства и EndPaint или ReleaseDC для его уничтожения.

Следует отметить, что при вызове BeginPaint и EndPaint обновляет фон рабочей области и устанавливает рабочую область в действительное состояние.

Получение рабочей области окна можно выполнить при помощи функции GetClientRect. При этом, использовать контекст, полученный при помощи BeginPaint, можно только для рисования в рабочей области окна.

Вывод текста можно осуществлять при помощи функций TextOut и DrawText. Информация о системных параметрах получается при помощи функций GetTextMetrics и GetSystemMetrcs.

Для рисования в рабочей области вашего окна используйте функции графического интерфейса устройства GDI. Одна из основных задач GDI – поддержка аппаратно-независимой графики. Функции GDI позволяют манипулировать как с пиксельной, так и векторной графикой.

Всвоей основе функции GDI могут быть разбиты на несколько крупных

групп.

Функции, которые получают (или создают) и освобождают (или уничтожают) указатели контекстов устройств. Данные функции подробно рассматривались в п.3 данных методических указаний.

Функции, которые получают информацию о контекстах устройства (см. выше).

Функции рисования. Наиболее часто используемые из них – MoveToEx (перемешение пера в новые координаты), LineTo (рисование линии), PolyLineTo (рисует ломаную линию по координатам точек), Rectangle (рисует прямоугольник), Ellipse (рисует эллипс), PolyBezier (рисует сплайны Безье), функции работы с полигонами – Polygon, CreateRectRgn, CreateEllipticRgn, CreatePolygonRgn, CombineRgn, FillRgn, FrameRgn, функции работы с битовыми образами – CreateDIBitmap, SetDIBitmap, GetDIBits, CreateBitmap, SetBitmapBits, BitBlt, StretchBlt, PatBlt.

Функции, которые устанавливают и получают атрибуты контекста устройства, которые устанавливают различные особенности работы функций рисования. Например, SetTextColor, SetTextAlign.

Функции, которые работают с объектами GDI. К ним относятся функ-

ции работы с перьями (CreatePen, CreatPenIndirect), фоном (SetBkColor,GetBkColor, CreateSolidBrush, CreateHatchBrush, CreateBrushIndirect), функции управления объектами: GetStockObject, SelectObject, Delete-

Object.

Пользуясь данными функциями можно работать со следующими типами графических объектов (примитивами):

Линии и кривые. GDI поддерживает прямые линии, прямоугольники, эллипсы, дуги, сплайны Безье.

Закрашенные области. Если набор прямых и кривых линий ограничивает со всех сторон некоторую область, то она может быть закрашена с использованием объекта GDI «кисть» (brush). Эта кисть может быть сплошной, штриховой или шаблонной.

Битовые (растровые) образы – двумерные массивы битов, соответствующие пикселям устройства отображения. Битовые образы используются для отображения картинок, курсоров мыши, иконок, кнопок панели инструментов и т.п.

Текст. Операционная система поддерживает множество функций работы с текстом, шрифтами.

Метафайлы – набор вызовов команд GDI, сохраненный в файловом виде. Используются для хранения и передачи векторной графики.

Регион – сложная область, состоящая из любых фигур.

Путь – набор отрезков и кривых. Могут использоваться для рисования, закрашивания и при отсечении.

Отсечение – некоторая область, ограничивающая пространство для графического вывода.

Палитра – набор цветов для рисования.

2.4 Задание на лабораторную работу

Вариант 1.

Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике.

Информация о метрике: ширину и высоту экрана в пикселях, ширину и высоту горизонтальной полосы прокрутки.

Информация об устройстве: ширину и высоту (в миллиметрах) монитора. Информация о шрифте: высоту шрифта и величину пространства над сим-

волом для специальный знаков.

Написать программу, рисующую четыре прямоугольника в клиентской области окна, которые делят его на четыре равные части. При изменении размеров окна, следует перерисовать прямоугольники, вычислив их новые размеры.

Вариант 2.

Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:

Информация о метрике: ширину и высоту иконки приложения, ширину и высоту рамки окна приложения.

Информация об устройстве: ширину и высоту (в пикселях) монитора. Информация о шрифте: усредненное значение символов, величину меж-

строкового расстояния.

Создать окно приложения в центре рабочего стола со следующими размерами: ширина 600, высота 450 точек. В центре окна нарисовать закрашенный эллипс со значениями диагоналей 250 и 100 точек. Вокруг эллипса описать пятиугольник. При изменении размеров окна, происходит пропорциональное изменение рисунка.

Вариант 3.

Написать, с использованием функций API программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:

Информация о метрике: ширину и высоту курсора, ширину и высоту иконки приложения.

Информация об устройстве: ширину и высоту (в пикселях) монитора. Информация о шрифте: высоту символов, усредненную ширину символа

строки.

Используя сплайны Безье, нарисовать в клиентской области окна приложения графики функций "синуса" и "косинуса". Каждый из графиков, а также оси координат должны быть разного цвета.

Вариант 4.

Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:

Информация о метрике: минимальную и максимальную ширину иконки, высоту и ширину меню.

Информация об устройстве: действительное цветовое разрешение. Информация о шрифте: высоту символов, ширину самого широкого сим-

вола.

Написать программу рисования графика функции, определяемой пользователем. Уравнение задается в виде функции, диапазон изменения аргумента задается константой. Программа автоматически определяет масштаб и выводит график функции таким образом, чтобы все значения функции были выведены в пределах окна приложения.

Вариант 5.

Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:

Информация о метрике: наличие мыши в системе и число кнопок у мыши, минимальную и максимальную ширину иконки.

Информация об устройстве: ширину и высоту (в пикселях) монитора. Информация о шрифте: высоту шрифта, ширину самого широкого симво-

ла.

Нарисовать в клиентской области окна приложения несколько фигур (прямоугольники – 2 шт., эллипсы – 2 шт., полигоны). Написать алгоритм закраши-

вания всех, полученных в результате этого, областей. Каждая область закрашивается своим оригинальным цветом и штриховкой.

Вариант 6.

Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:

Информация о метрике: величину прямоугольника, попадая в который засчитывается двойной щелчок мыши, наличие мыши в системе и число кнопок у мыши.

Информация об устройстве: ширину и высоту (в миллиметрах) монитора. Информация о шрифте: высоту шрифта и величину межстрокового рассто-

яния.

Написать программу, заполняющую клиентскую область окна приложения разноцветными квадратами одного размера. При изменении размеров окна, происходит перерисовка, причем количество квадратов зависит от размеров окна.

Вариант 7.

Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:

Информация о метрике: величину прямоугольника, попадая в который засчитывается двойной щелчок мыши, минимальную и максимальную ширину иконки.

Информация об устройстве: ширину и высоту (в пикселях) монитора. Информация о шрифте: усредненную величину символа строки и величину

пространства над символом для специальный знаков.

Нарисовать в клиентской области окна приложения несколько фигур (прямоугольники, эллипсы, полигоны). Написать алгоритм закрашивания всех, полученных в результате этого, областей. Каждая область закрашивается своим оригинальным цветом и штриховкой. С помощью кривых создать схематический график функции, оси координат и график должны быть разного цвета.

Вариант 8.

Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:

Информация о метрике: ширина и высота иконки приложения, ширина и высота вертикальной полосы прокрутки.

Информация об устройстве: действительное цветовое разрешение. Информация о шрифте: ширину самого широкого символа, высоту шриф-

та.

Используя пути, написать программу, рисующую замкнутую фигуру, заданную преподавателем, закрашенную заданным фоном и штриховкой.

Вариант 9.

Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:

Информация о метрике: высоту полосы меню, высоту заголовка, наличие мыши в системе и количество кнопок мыши.

Информация об устройстве: действительное цветовое разрешение. Информация о шрифте: усредненную ширину символа строки и ширину

самого широкого символа.

Написать алгоритм закрашивания произвольной области экрана, ограниченной непрерывным контуром, заданным преподавателем. Начало закраски определяется произвольной точкой внутри контура.

Вариант 10.

Написать, с использованием функций API, программу, которая выводит в окно приложения информацию, получаемую из контекста, об устройстве и метрике:

Информация о метрике: величину прямоугольника, попадая в который засчитывается двойной щелчок мыши, высота и ширина курсора.

Информация об устройстве: действительное цветовое разрешение. Информация о шрифте: высоту шрифта, величину межстрокового расстоя-

ния.

Используя пути, написать программу, рисующую замкнутую фигуру, заданную преподавателем, закрашенную заданным фоном и штриховкой

2.5. Контрольные вопросы и задания

1.Дайте определение контекста устройства.

2.Раскройте суть понятия «описатель контекста устройства». Для чего он предназначен?

3.Какими способами можно получить описатель контекста устройства?

4.Чем отличается использование функций GetDC, ReleaseDC и BeginPaint, EndPaint?

5.Каким образом можно изменить шрифт, используемый в данном контексте?

6.В чем отличие растровых шрифтов и шрифтов «true type»?

7.Какие атрибуты контекста устройства и текста Вы знаете?

8.Что такое «кисть» и «фон»? Для чего они предназначены и каким образом они задаются?

9.Какие функции вывода текста Вы знаете?

10.Дайте характеристику метрическим параметрам текста. Каким образом получить информацию о текущих метрических параметрах текста?

11. Что понимается под рабочей и клиентской областью окна приложения? 12.Каково назначение графического интерфейса устройства (GDI)?