Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный практикум по СП.doc
Скачиваний:
53
Добавлен:
11.05.2015
Размер:
363.01 Кб
Скачать

8.2. Контрольные вопросы

1. Контексты графических устройств.

2. Последовательность формирования изображения в окне.

3. Активные инструменты PenиBrush, их создание и выбор. Параметры функций созданияPenиBrush.

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

5. Каким образом может быть нарисован Polyline.

6. Самоотрисовывающаяся кнопка (OWNERDRAW). Как она может быть создана, как на ней рисовать собственный рисунок и как обрабатывать нажатия на такие кнопки.

8.3. Задание

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

Лабораторная работа №9 Динамичесое отображение данных на окне Цели работы:

  1. изучить возможности графической подсистемы.

  2. научиться использовать расширенные возможности графики GDI.

9.1. Краткие теоретические сведения

Помимо описанных выше графических примитивов GDIработает также и с растровыми изображениями, то есть целыми массивами (матрицами) пик­селей. В простейшем случае изображение может формироваться попиксельно с помощью функцииSetPixel(), но обычно этот путь слишком медленный и неудобный. (Имеется также функцияGetPixel()– доступ к отдельным пикселям изображения.)

GDIпредоставляет ряд функций для манипулирования целыми фраг­мен­тами изображений:

BitBlt() – копирование прямоугольной области из одного контекста в другой без каких-либо преобразований;

StretchBlt() – копирование области с масштабированием по обеим осям (обычно с уменьшением, так как при растяжении изображение заметно портится);

MaskBlt()– перенос с маскированием части изображения;

PlgBlt()– перенос прямоугольного фрагмента в непрямоугольную область с соответствующим геометрическим искажением.

В ряде случаев формирование всего изображения заново может быть слишком длительным – например, различного рода анимация или изобра­жения из очень большого числа элементов. В этом случае эффективно использование «теневых» контекстов или «контекстов в памяти». Такие контексты не имеют связи с реальным устройством, вместо этого рабочую поверхность для них образует битовая карта (bitmap) или метафайл. (Под метафайлом здесь понима­ется объектMetafile, фактически хранящий последо­вательность приме­няв­шихся к нему графических примитивов и способный их воспроизвести.)

«Теневой» контекст создается совместимым с текущим экранным режимом, и с ним ассоциируется «битовая карта»:

hShadowDC = CreateCompatibleDC( NULL);

hBitmap = CreateCompatibleBitmap( hPrimDC, width, height);

SelectObject( hShadowDC, hBitmap);

Здесь hPrimeDC – «реальный» контекст, в котором необходимо формировать изображение.

После создания «теневого» контекста в нем формируется необходимое изображение. Далее в процессе работы программы это изображение или его фрагменты переносятся на «основной» (видимый) контекст.