
- •1) Для создания контекста метафайла используется функция CreateMetaFile:
- •3) Если имеется идентификатор метафайла, то метафайл можно скопировать в обычный дисковый файл, с помощью функции CopyMetaFile :
- •4) Можно проиграть метафайл в контексте отображения или контексте устройства, вызвав функцию PlayMetaFile:
- •6) Для того чтобы воспользоваться метафайлом, хранящимся в виде дискового файла, его нужно загрузить функцией GetMetaFile, указав в качестве параметра путь к соответствующему файлу:
- •Изменились размеры или местоположение окна;
- •Клиентская область была полностью или частично закрыта другим окном или выпадающим меню, а теперь закрывающий объект исчез;
- •Приложение вызвало одну из функций работы с полосами прокрутки.
- •Битовые изображения в формате ddb
- •Загрузка изображений из ресурсов приложения
- •Int winapi GetObject(
- •Int cbBuffer, // размер буфера
- •Void far* lpvObject); // адрес буфера
- •Захват изображения
- •1) Чтобы вывести изображение экрана в окно необходимо в первую очередь создать контекст для устройства display с помощью функции CreateDc("display", null, null, null) или GetDc(null);
- •3) Далее необходимо выбрать созданный точечный рисунок в этот контекст устройства при помощи вызова функции SelectObject.
- •If (!hWnd)
- •Int wmId, wmEvent;
- •Рисование точки
- •Int nXPos, // X-координата точки
- •Int nYPos, // y-координата точки
- •Int nX, // х - координата конечной точки;
- •Int nY // у - координата конечной точки
- •Рисование прямоугольника
- •Int winapi FrameRect(
- •Рисование сегмента эллипса
- •Рисование сектора эллипса
- •Рисование многоугольников
- •Int far* lpnPolyCounts, // адрес массива количества точек
- •Int cPolygons); // количество многоугольников
Битовые изображения в формате ddb
Изображения DDB либо загружаются из ресурсов приложения, либо создаются непосредственно в оперативной памяти. Для вывода изображений DDB на экран используются такие функции, как BitBlt и StretchBlt.
Изображения DIB, в отличие от изображений DDB, являются аппаратно-независимыми, поэтому без дополнительного преобразования их нельзя отображать на экране с помощью функций BitBlt и StretchBlt.
Загрузка изображений из ресурсов приложения
Самый простой способ использования битовых изображений заключается в том, что изображение создается графическим редактором в виде bmp-файла и описывается в файле определения ресурсов приложения при помощи оператора BITMAP:
LOGO BITMAP mylogo.bmp
Созданное битовое изображение можно загрузить в память при помощи функции LoadBitmap:
HBITMAP WINAPI LoadBitmap(HINSTANCE hinst, LPCSTR lpszBitmap);
hinst – идентификатор копии приложения, из ресурсов которого нужно загрузить изображение.
lpszBitmap – идентификатор ресурса изображения.
Функция LoadBitmap возвращает идентификатор загруженного изображения или NULL при ошибке.
После использования приложение должно удалить битовое изображение.
Приложение может определить параметры загруженного изображения, вызвав функцию GetObject:
Int winapi GetObject(
HGDIOBJ hgdiobj, // идентификатор объекта
Int cbBuffer, // размер буфера
Void far* lpvObject); // адрес буфера
Параметр hgdiobj – идентификатор изображения;
Параметр cbBuffer – указывает на размер структуры BITMAP.
Параметр lpvObject – указывает на структуру типа BITMAP, в которую будут записаны сведения об изображении.
Например определить параметры изображения можно следующим образом:
BITMAP bm;
HBITMAP hBitmap;
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
Структура BITMAP имеет вид:
typedef struct tagBITMAP
{
int bmType;
int bmWidth;
int bmHeight;
int bmWidthBytes;
BYTE bmPlanes;
BYTE bmBitsPixel;
void FAR* bmBits;
} BITMAP;
Поле |
Описание |
bmType |
Тип битового изображения. Должен быть равен 0 |
bmWidth |
Ширина битового изображения в пикселах, должна быть больше 0 |
bmHeight |
Высота битового изображения в пикселах, должна быть больше 0 |
bmWidthBytes |
Размер памяти, занимаемый одной строкой растра битового изображения. Это значение должно быть четным, так как массив изображения состоит из целых чисел размером 16 бит. Таким образом, произведение bmWidthBytes*8 должно быть кратно 16. Кроме того, это произведение должно быть больше или равно произведению bmWidth*bmBitsPixel |
bmPlanes |
Количество плоскостей в битовом изображении. В зависимости от типа видеоадаптера и его режима работы для представления цвета одного пиксела может использоваться несколько бит, расположенных в одной или нескольких плоскостях видеопамяти. |
bmBitsPixel |
Количество битов, используемых для представления цвета пиксела. Если используется несколько плоскостей, то это поле содержит количество бит одной плоскости, используемых для представления цвета пиксела |
bmBits |
Дальний указатель на массив, содержащий биты изображения |