Окт 16

Создание метафайла

Расширенный метафайл является таким же объектом GDI, как, например, объект кисти или объект DIB-секции. Объект расширенного метафайла однозначно определяется своим дескриптором типа HENHMETAFILE. Создание метафайла и запись в него команд GDI связаны с использованием метафайлового контекста устройства, который рассматривался во второй главе.
Метафайловый контекст устройства создается функцией CreateEnhMetaFile:
HDC CreateEnhMetaFile(HDC hdcRef. LPCTSTR IpFilename. CONST RECT lpRect, LPCTSTR IpDescription);
Первый параметр, hdcRef, указывает на эталонный контекст устройства, данные которого будут использованы при записи EMF. Если этот параметр имеет значение NULL, то GDI принимает в качестве эталона текущий экран.
Во втором параметре, IpFilename, может передаваться имя файла на диске или значение NULL. Если передается NULL, то метафайл создается в памяти. Если передается имя файла, то после удаления объекта метафайла функцией DeleteEnhMetaFile файловый вариант сохраняется на диске.
Третий параметр, IpRect, определяет позицию и размеры сохраняемого изображения в единицах 0,01 мм. Если параметр имеет значение NULL, то GDI вычисляет ограничивающий прямоугольник по всем командам вывода.
Последний параметр, IpDescription, содержит необязательное текстовое описание, сохраняемое в метафайле. Обычно описание содержит имя приложения и имя документа, разделенные нулевым символом. Это описание должно завершаться двумя нулевыми символами.
Функция CreateEnhMetaFile возвращает дескриптор метафайлового контекста устройства. Этот дескриптор передается затем всем графическим функциям GDI для записи «протокола рисования» в метафайл.
Когда рисование завершено, необходимо вызвать функцию CloseEnhMetaFile, которая закрывает метафайловый контекст и возвращает дескриптор расширенного метафайла. Этот дескриптор может быть использован для воспроизведения метафайла.
Как говорилось выше, если имя файла было задано при вызове функции CreateEnhMetaFile, то сохранение файла на диске происходит после вызова функции DeleteEnhMetaFile, которая удаляет объект метафайла из памяти приложения.