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


Улучшенные записи метафайлов

Расширенный метафайл — это массив записей. Запись метафайла — это структура ENHMETARECORD переменной длины. В начале каждой записи расширенного метафайла находится структура EMR , содержащая два члена. Первый элемент, iType, определяет тип записи, то есть функцию GDI, параметры которой содержатся в записи. Так как структуры имеют переменную длину, другой элемент nSize содержит размер записи. Сразу после члена nSize находятся остальные параметры функции GDI , если таковые имеются. Остальная часть структуры содержит дополнительные данные, зависящие от типа записи.

Первой записью в расширенном метафайле всегда является структура ENHMETAHEADER , которая представляет собой заголовок расширенного метафайла. Заголовок указывает следующие сведения:

  • Размер метафайла в байтах
  • Размеры рамки рисунка в единицах устройства
  • Размеры рамки рисунка в единицах 0,01 миллиметра
  • Количество записей в метафайле
  • Смещение к необязательному описанию текста
  • Размер необязательной палитры
  • Разрешение исходного устройства в пикселях
  • Разрешение исходного устройства в миллиметрах

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

00000011 0000000C 00000004 

Значение 0x00000011 указывает тип записи (соответствует константе EMR_SETMAPMODE, определенной в файле Wingdi.h). Значение 0x0000000C указывает длину записи в байтах. Значение 0x00000004 определяет режим сопоставления (соответствует константе MM_LOENGLISH, определенной в функции SetMapMode ).

Список дополнительных типов записей см. в разделе Структуры метафайлов.