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


Расширенные операции метафайла

Для выполнения следующих задач можно использовать дескриптор для расширенного метафайла:

  • Отображение рисунка, хранящегося в расширенном метафайле.
  • Создайте копии расширенного метафайла.
  • Изменение расширенного метафайла.
  • Получите необязательное описание, хранящееся в расширенном метафайле.
  • Получите копию заголовка расширенного метафайла.
  • Получение двоичной версии расширенного метафайла.
  • Перечислите цвета в необязательной палитре.

Эти задачи рассматриваются в разделах в оставшейся части этого раздела.

Отображение рисунка, хранящегося в расширенном метафайле

Изображение, хранящееся в расширенном метафайлу, можно отобразить с помощью функции PlayEnhMetaFile. Передайте функцию дескриптор в расширенный метафайл, не беспокоясь о формате расширенных записей метафайлов. Однако иногда желательно перечислить записи в расширенном метафайле, чтобы искать определенную функцию GDI и изменять параметры функции каким-то образом. Для этого можно использовать EnumEnhMetaFile и предоставить функцию обратного вызова EnhMetaFileProcдля обработки расширенных записей метафайлов. Чтобы изменить параметры для расширенной записи метафайла, необходимо знать формат параметров в записи.

Создание копий расширенного метафайла

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

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

Изменение расширенного метафайла

Большинству приложений для рисования, иллюстрации и компьютерного проектирования (CAD) требуется средство редактирования рисунка, хранящегося в расширенном метафайле. Хотя редактирование расширенного метафайла является сложной задачей, вы можете использовать функцию EnumEnhMetaFile в сочетании с другими функциями, чтобы обеспечить эту возможность в приложении. Функция EnumEnhMetaFile и связанная с ней функция обратного вызова EnhMetaFileProc позволяет приложению обрабатывать отдельные записи в расширенном метафайлу.

Получение необязательного описания, хранящегося в расширенном метафайле

В некоторых приложениях отображается текстовое описание расширенного метафайла с соответствующим именем файла в диалоговом окне Открыть. Эту строку можно определить, существует ли эта строка в расширенном метафайле, извлекая заголовок метафайла с помощью функции getEnhMetaFileHeader и изучая один из его членов. Если строка существует, приложение извлекает его путем вызова функции GetEnhMetaFileDescription.

Получение двоичной версии расширенного метафайла

Содержимое метафайла можно получить, вызвав функцию GetEnhMetaFileBits; Однако перед получением содержимого необходимо указать размер файла. Чтобы получить размер, можно использовать функцию GetEnhMetaFileHeaderи проверить соответствующий элемент.

Перечисление цветов в необязательной палитре

Чтобы обеспечить согласованные цвета при отображении рисунка на различных выходных устройствах, можно вызвать функцию CreatePalette и сохранить логическую палитру в расширенном метафайле. Приложение, отображающее рисунок, хранящийся в расширенном метафайле, извлекает эту палитру и вызывает функцию RealizePalette перед отображением рисунка. Чтобы определить, хранится ли палитра в расширенном метафайле, получите заголовок метафайла и проверьте соответствующий элемент. Если палитра существует, можно вызвать функцию GetEnhMetaFilePaletteEntries , чтобы получить логическую палитру.