Контекст для метафайла
Контекст для метафайла позволяет записывать команды GDI в файл и затем проигрывать такой файл на физическом устройстве вывода. Файл может находиться в памяти или на диске, в последнем случае его можно использовать для переноса графического изображения в другое приложение.
Для создания контекста метефайла используется функция CreateMetaFile :
HDC WINAPI CreateMetaFile(LPCSTR lpszFileName);
Параметр lpszFileName должен указывать на строку, содержащую путь к имени файла, в который будут записаны команды GDI, или NULL. В последнем случае создается метафайл в оперативной памяти.
После выполнения рисования в контексте метафайла следует закрыть метафайл, вызвав функцию CloseMetaFile :
HMETAFILE WINAPI CloseMetaFile(HDC hdc);
Эта функция закрывает метафайл для контекста hdc и возвращает идентификатор метафайла. Идентификатор закрытого метафайла использовать нельзя, так как он не содержит никакой полезной информации.
Что можно сделать с полученным идентификатором метафайла?
Можно скопировать метафайл в обычный дисковый файл, вызвав функцию CopyMetaFile :
HMETAFILE WINAPI CopyMetaFile(HMETAFILE hmf,
LPCSTR lpszFileName);
Параметр hmf определяет метафайл, параметр lpszFileName содержит путь к имени файла, в который будет записан метафайл .
Можно проиграть метафайл в контексте отображения или контексте устройства, вызвав функцию PlayMetaFile :
BOOL WINAPI PlayMetaFile(HDC hdc, HMETAFILE hmf);
Наконец, при помощи функции DeleteMetaFile можно удалить метафайл:
BOOL WINAPI DeleteMetaFile(HMETAFILE hmf);
Удаление метафайла с помощью функции DeleteMetaFile делает недействительным идентификатор метафайла hmf и освобождает оперативную память, занятую метафайлом. Если метафайл был создан как обычный дисковый файл, функция DeleteMetaFile не удаляет его с диска.
Для того чтобы воспользоваться метафайлом, хранящимся в виде дискового файла, его следует загрузить при помощи функции GetMetaFile , указав ей в качестве единственного параметра путь к соответствующему файлу:
HMETAFILE WINAPI GetMetaFile(LPCSTR lpszFileName);
Функция GetDCEx
В программном интерфейсе операционной системы Windows версии 3.1 появилась функция GetDCEx , предоставляющая расширенные возможности для получения контекста отображения:
HDC WINAPI GetDCEx(register HWND hwnd, HRGN hrgnClip, DWORD flags);
Функция возвращает идентификатор полученного контекста отображения или NULL при ошибке.
Параметр hwnd задает идентификатор окна, для которого необходимо получить контекст отображения.
С помощью параметра hrgnClip можно определить область ограничения вывода. Эта область может иметь произвольную форму и являться комбинацией нескольких областей ограничения. Использование областей ограничения будет подробно описано дальше в этой главе.
Параметр flags определяет способ, которым будет образован контекст отображения. Этот параметр можно указывать как логическую комбинацию следующих значений:
Константа | Описание |
DCX_WINDOW | Функция возвращает контекст отображения, позволяющий рисовать во всем окне, а не только в его внутренней области |
DCX_CACHE | Функция получает общий контекст отображения из кеша Windows, даже если окно создано на базе класса стиля CS_OWNDC или CS_CLASSDC |
DCX_CLIPCHILDREN | Видимые области всех дочерних окон, расположенных ниже окна hwnd, исключаются из области отображения |
DCX_CLIPSIBLINGS | Видимые области всех окон - братьев (окон, имеющих общих родителей), расположенных выше окна hwnd, исключаются из области отображения |
DCX_PARENTCLIP | Для отображения используется вся видимая область родительского окна, даже если родительское окно создано с использованием стилей WS_CLIPCHILDREN и WS_PARENTDC. Начало координат устанавливается в левый верхний угол окна hwnd |
DCX_EXCLUDERGN | Если указан этот флаг, при выводе будет использована область ограничения, заданная параметром hrgnClip |
DCX_INTERSECTRGN | Используется пересечение области ограничения, заданной параметром hrgnClip, и видимой области полученного контекста отображения |
DCX_LOCKWINDOWUPDATE | Этот флаг разрешает рисование в окне, заблокированном для рисования функцией LockWindowUpdate . Флаг можно использовать при необходимости рисовать, например, рамку, выделяющую произвольную область экрана |
Контекст отображения, полученный функцией GetDCEx, следует освободить после использования при помощи функции ReleaseDC.
Дата добавления: 2016-07-22; просмотров: 1952;