Прототип варианта 17 - Анализатор структуры метафайла

Страницы работы

Содержание работы

Прототип варианта 17 - Анализатор структуры метафайла

Метафайлы

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

Каждая запись метафайла содержит одну команду вывода GDI. Полный список команд GDI, которые могут быть представлены записями метафайлов, приведен в приложении Б при описании структур данных METARECORD и ENHMETARECORD.

В Win32 поддерживаются метафайлы двух разных типов: стандартные метафайлы Windows и расширенные (enhanced) метафайлы. Документация Win32 настоятельно рекомендует работать с расширенными метафайлами, поскольку в них поддерживаются все графические функции Win32, полная 32-разрядная система координат и дополнительные возможности, не присущие стандартным метафайлам. Однако при этом возникает одна проблема — расширенные метафайлы несовместимы с 16-разрядными версиями Windows. Несмотря на все усилия Microsoft, расширенные метафайлы еще не получили широкой поддержки в графических редакторах и библиотеках рисунков (clipart). При быстром просмотре двух дисков, на одном из которых была установлена Windows NT, а на другом Windows 95, было обнаружено несколько сотен стандартных метафайлов и ни одного расширенного метафайла. По этой причине, хотя расширенные метафайлы документируются в этой книге, в примерах по-прежнему используются стандартные метафайлы Windows.

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

Кроме того, существуют функции для преобразования метафайла от одного типа к другому. Термин «метафайл» определяет концепцию — объект, содержащий графические команды GDI. Метафайл может существовать на диске или в памяти. Метафайл, находящийся в памяти, также можно скопировать в буфер обмена (clipboard). Существуют функции API для сохранения и загрузки стандартных метафайлов с диска, однако пользоваться ими не рекомендуется. Формат метафайла, используемый этими функциями API, унаследован от Windows версии 1.0 и не является стандартным. Стандартный файловый формат метафайлов, с которым обычно связывается расширение .WMF (Windows metafile, то есть «метафайл Windows»), в действительности является форматом так называемого «размещаемого» (placeable) метафайла. В начале размещаемых метафайлов хранится дополнительная структура с информацией о рекомендуемом размере и разрешении, для которого создавался рисунок. Чтение и запись размещаемых метафайлов продемонстрированы в приложении QuikDraw.vbp. Функции чтения/записи расширенных дисковых метафайлов не подчиняются этим ограничениям, и их можно использовать напрямую.

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

При работе с метафайлами необходимо помнить о двух обстоятельствах. Прежде всего, не каждая функция GDI поддерживается метафайлами. В приложении Б при описании структур METARECORD и ENHMETARECORD перечислены функции, поддерживаемыми стандартными и расширенными метафайлами. Стандартные метафайлы не поддерживают новые графические сред» ства Win32 (в частности, траектории и кривые Безье). Также учтите, что метафайлы содержат простую запись команд GDI, и обработка данных в них не поддерживается. Таким образом, возвращаемые значения команд GDI игнорируются. Это не означает, что приложение не может модифицировать воспроизводимый метафайл (приложение Analyze.vbp показывает, как это делается), а лишь то, что данная возможность является частью приложения, но не метафайла. Функции метафайлов перечислены в табл. 8.8.

Таблица 8.8. Функции метафайлов

Похожие материалы

Информация о работе