Поделиться через


Расширенное создание метафайла

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

Для поддержания измерений рисунка на устройствах вывода CreateEnhMetaFile требует разрешения эталонного устройства. Это эталонное устройство — это устройство, на котором впервые появилось изображение, а эталонный контроллер домена — это контекст устройства, связанный с эталонным устройством. При вызове функции createEnhMetaFile необходимо указать дескриптор, определяющий этот контроллер домена. Этот дескриптор можно получить, вызвав функцию GetDCили CreateDC. Можно также указать NULL в качестве дескриптора для использования текущего устройства отображения для эталонного устройства.

Большинство приложений хранят изображения постоянно и поэтому создают расширенный метафайл, хранящийся на диске; однако существуют некоторые экземпляры, когда это не требуется. Например, приложение для word-обработки, которое предоставляет возможности рисования диаграммы, может хранить определяемую пользователем диаграмму в памяти в виде расширенного метафайла, а затем копировать расширенные биты метафайла из памяти в файл документа пользователя. Приложение, требующее метафайла, который хранится постоянно на диске, должен указать имя файла при вызове CreateEnhMetaFile. Если имя файла не указано, система автоматически обрабатывает метафайл как временный файл и сохраняет его в памяти.

Можно добавить необязательное описание текста в метафайл, содержащий сведения о рисунке и авторе. Приложение может отображать эти строки в диалоговом окне "Открыть файл", чтобы предоставить пользователю сведения о содержимом метафайла, который поможет выбрать соответствующий файл. Если приложение содержит текстовое описание, он должен указать указатель на строку при вызове CreateEnhMetaFile.

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

После завершения рисунка и последней записи добавляется к расширенному метафайлу, приложение может закрыть файл, вызвав функцию CloseEnhMetaFile. Эта функция закрывает и удаляет специальный контекст устройства метафайла и возвращает дескриптор, определяющий расширенный метафайл.

Чтобы удалить метафайл расширенного формата или дескриптор метафайла расширенного формата, вызовите функцию DeleteEnhMetaFile.