Контекст для метафайла
Контекст для метафайла
Контекст для метафайла позволяет записывать команды GDI в файл и затем проигрывать такой файл на физическом устройстве вывода. Файл может находиться в памяти или на диске, в последнем случае его можно использовать для переноса графического изображения в другое приложение.
Для создания контекста метефайла используется функция CreateMetaFile : HDC WINAPI CreateMetaFile(LPCSTR lpszFileName);
Параметр lpszFileName должен указывать на строку, содержащую путь к имени файла, в который будут записаны команды GDI, или NULL. В последнем случае создается метафайл в оперативной памяти.
После выполнения рисования в контексте метафайла следует закрыть метафайл, вызвав функцию CloseMetaFile : HMETAFILE WINAPI CloseMetaFile(HDC hdc);
Эта функция закрывает метафайл для контекста hdc и возвращает идентификатор метафайла. Идентификатор закрытого метафайла использовать нельзя, так как он не содержит никакой полезной информации.
Что можно сделать с полученным идентификатором метафайла?
Можно скопировать метафайл в обычный дисковый файл, вызвав функцию CopyMetaFile :
HMETAFILE WINAPI CopyMetaFile(HMETAFILE hmf, LPCSTR lpszFileName);
Параметр hmf определяет метафайл, параметр lpszFileName содержит путь к имени файла, в который будет записан метафайл .
Можно проиграть метафайл в контексте отображения или контексте устройства, вызвав функцию PlayMetaFile : BOOL WINAPI PlayMetaFile(HDC hdc, HMETAFILE hmf);
Наконец, при помощи функции DeleteMetaFile можно удалить метафайл: BOOL WINAPI DeleteMetaFile(HMETAFILE hmf);
Удаление метафайла с помощью функции DeleteMetaFile делает недействительным идентификатор метафайла hmf и освобождает оперативную память, занятую метафайлом. Если метафайл был создан как обычный дисковый файл, функция DeleteMetaFile не удаляет его с диска.
Для того чтобы воспользоваться метафайлом, хранящимся в виде дискового файла, его следует загрузить при помощи функции GetMetaFile , указав ей в качестве единственного параметра путь к соответствующему файлу: HMETAFILE WINAPI GetMetaFile(LPCSTR lpszFileName);