Растровые изображения, пиктограммы и метафайлы, страница 3

Листинг 13.3. Применение пиктограммы при регистрации класса окна

____________

СМ.    \local-sources\chapl3\tl3-03.txt

Создание пиктограмм во время выполнения

Система Windows позволяет создавать и модифицировать пиктограммы во время работы программы. Применяемая для этого функция Createlcon аналогична функции CreateCursor. Обе эти функции создают изображение, объединяя два растровых изображения. Функция Createlcon позволяет создавать пиктограммы на основе двоичного массива, данных растрового изображения и аппаратно-независимых растровых изображений. Функция Destroylcon позволяет удалить пиктограмму, созданную с помощью функции Createlcon, и освободить память, занимаемую данными пиктограммы. Как правило, не следует изменять пиктограммы во время выполнения, поскольку пользователи рассчитывают на то, что пиктограммы будут оставаться неизменными.

Метафайлы

Метафайлы представляют собой закодированные вызовы функций интерфейса графических устройств (GDI — Graphics Device Interface). При воспроизведении метафайла достигается такой же результат, как и при непосредственном использовании функций

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

Метафайлы Windows 3.x поддерживаются Windows 2000 и Windows 98; однако рекомендуется использовать в приложениях Win32 новые расширенные метафайлы. Основное различие между метафайлом Windows 3.x и расширенным метафайлом состоит в том, что последний не зависит от устройства и позволяет применять новые вызовы GDI, доступные в API Win32. Каждой функции, применяемой с метафайлами Windows 3.x, соответствует функция работы с расширенными метафайлами API Win32. Например, функции PlayMetaFile соответствует функция работы с расширенными метафайлами PlayEnhMetaFile. Поскольку функции, применяемые с метафайлами Windows 3.x, предусмотрены лишь для совместимости и не рекомендуются для приложений Win32, в настоящей главе рассматриваются только функции расширенных метафайлов.

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

Метафайлы создаются в контексте устройства метафайла с использованием функций GDI. В качестве основы метафайла применяется справочный контекст устройства, что позволяет управлять размерами изображения на всех устройствах вывода. Этим справочным устройством является то устройство, на котором впервые появилось данное изображение. В листинге 13.4 показано создание расширенного метафайла, который выводит прямоугольник, закрашенный кистью со штриховым рисунком. Обратите внимание, что размеры клиентской области вычисляются в единицах длины, равных 0,01 мм, и передаются функции CreateEnhMetaFile.

Листинг 13.4. Создание расширенного метафайла

См.    \local-sources\chapl3\tl3-04.txt

Метафайлы в файле на диске

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

hMetaDC  =  CreateEnhMetaFile(  hRefDC,   "mymeta.emf", Srect,   "Test  Metafile"  );

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