Класс CMetaFileDC
Реализует метафайл Windows, который содержит последовательность команд интерфейса графических устройств (GDI), которые можно воспроизвести для создания нужного изображения или текста.
Синтаксис
class CMetaFileDC : public CDC
Участники
Открытые конструкторы
Имя | Описание |
---|---|
CMetaFileDC::CMetaFileDC | Формирует объект CMetaFileDC . |
Открытые методы
Имя | Описание |
---|---|
CMetaFileDC::Close | Закрывает контекст устройства и создает дескриптор метафайла. |
CMetaFileDC::CloseEnhanced | Закрывает контекст устройства расширенного метафайла и создает расширенный дескриптор метафайла. |
CMetaFileDC::Create | Создает контекст устройства метафайла Windows и присоединяет его к объекту CMetaFileDC . |
CMetaFileDC::CreateEnhanced | Создает контекст устройства метафайла для метафайла расширенного формата. |
Замечания
Чтобы реализовать метафайл Windows, сначала создайте CMetaFileDC
объект. CMetaFileDC
Вызовите конструктор, а затем вызовите функцию create member, которая создает контекст устройства метафайла Windows и присоединяет его к объектуCMetaFileDC
.
Затем отправьте объект последовательности CMetaFileDC
команд CDC GDI, которые вы планируете воспроизвести. Можно использовать только те команды GDI, которые создают выходные данные, например MoveTo
и LineTo
.
После отправки требуемых команд в метафайл вызовите Close
функцию-член, которая закрывает контексты устройства метафайла и возвращает дескриптор метафайла. Затем удалите CMetaFileDC
объект.
CDC::P layMetaFile может использовать дескриптор метафайла для многократного воспроизведения метафайла. Метафайл также можно управлять функциями Windows, такими как CopyMetaFile, который копирует метафайл на диск.
Если метафайл больше не нужен, удалите его из памяти с помощью функции DeleteMetaFile Windows.
Можно также реализовать объект, чтобы он обрабатывал как выходные CMetaFileDC
вызовы, так и вызовы GDI атрибутов, например GetTextExtent
. Такой метафайл является более гибким и может более легко повторно использовать общий код GDI, который часто состоит из сочетания вызовов выходных данных и атрибутов. Класс CMetaFileDC
наследует два контекста m_hDC
устройства и m_hAttribDC
от CDC. Контекст m_hDC
устройства обрабатывает все выходные вызовы CDC GDI, а m_hAttribDC
контекст устройства обрабатывает все вызовы атрибута CDC GDI. Как правило, эти два контекста устройства ссылаются на одно и то же устройство. В случае CMetaFileDC
с атрибутом контроллер домена по умолчанию имеет значение NULL.
Создайте второй контекст устройства, указывающий на экран, принтер или устройство, отличное от метафайла, а затем вызовите SetAttribDC
функцию-член, чтобы связать новый контекст устройства с m_hAttribDC
. Теперь вызовы GDI для получения информации будут направляться в новые m_hAttribDC
. Вызовы GDI выходных данных будут переходить к m_hDC
файлу метафайла.
Дополнительные сведения см. в CMetaFileDC
разделе "Контексты устройств".
Иерархия наследования
CMetaFileDC
Требования
Заголовок: afxext.h
CMetaFileDC::Close
Закрывает контекст устройства метафайла и создает дескриптор метафайла Windows, который можно использовать для воспроизведения метафайла с помощью функции члена CDC::P layMetaFile .
HMETAFILE Close();
Возвращаемое значение
Допустимый HMETAFILE, если функция выполнена успешно; в противном случае ЗНАЧЕНИЕ NULL.
Замечания
Дескриптор метафайла Windows также можно использовать для управления метафайлом с помощью таких функций Windows, как CopyMetaFile.
Удалите метафайл после использования, вызвав функцию Windows DeleteMetaFile .
CMetaFileDC::CloseEnhanced
Закрывает контекст устройства расширенного метафайла и возвращает дескриптор, определяющий метафайл расширенного формата.
HENHMETAFILE CloseEnhanced();
Возвращаемое значение
Дескриптор расширенного метафайла, если он выполнен успешно; в противном случае ЗНАЧЕНИЕ NULL.
Замечания
Приложение может использовать дескриптор расширенного метафайла, возвращаемый этой функцией, для выполнения следующих задач:
Отображение рисунка, хранящегося в расширенном метафайле
Создание копий расширенного метафайла
Перечисление, изменение или копирование отдельных записей в расширенном метафайле
Получение необязательного описания содержимого метафайла из заголовка расширенного метафайла
Получение копии заголовка расширенного метафайла
Получение двоичной копии расширенного метафайла
Перечисление цветов в необязательной палитре
Преобразование метафайла расширенного формата в метафайл формата Windows
Если приложению больше не нужен расширенный дескриптор метафайлов, он должен освободить дескриптор, вызвав функцию Win32 DeleteEnhMetaFile
.
CMetaFileDC::CMetaFileDC
CMetaFileDC
Создайте объект на двух шагах.
CMetaFileDC();
Замечания
Сначала вызовите, а затем вызовCMetaFileDC
Create
, который создает контекст устройства метафайла Windows и присоединяет его к объектуCMetaFileDC
.
CMetaFileDC::Create
CMetaFileDC
Создайте объект на двух шагах.
BOOL Create(LPCTSTR lpszFilename = NULL);
Параметры
lpszFilename
Указывает на строку символов, завершаемую значением NULL. Указывает имя файла создаваемого метафайла. Если значение lpszFilename равно NULL, создается новый метафайл в памяти.
Возвращаемое значение
Ненулевое значение, если функция выполнена успешно; в противном случае — 0.
Замечания
Сначала вызовите конструктор CMetaFileDC
, а затем вызовите Create
, который создает контекст устройства метафайла Windows и присоединяет его к объекту CMetaFileDC
.
CMetaFileDC::CreateEnhanced
Создает контекст устройства для метафайла расширенного формата.
BOOL CreateEnhanced(
CDC* pDCRef,
LPCTSTR lpszFileName,
LPCRECT lpBounds,
LPCTSTR lpszDescription);
Параметры
pDCRef
Определяет эталонное устройство для расширенного метафайла.
lpszFileName
Указывает на строку символов, завершаемую значением NULL. Указывает имя файла для создаваемого расширенного метафайла. Если этот параметр имеет значение NULL, расширенный метафайл основан на памяти и его содержимое теряется при уничтожении объекта или при вызове функции Win32 DeleteEnhMetaFile
.
lpBounds
Указывает на структуру данных RECT или объект CRect , указывающий измерения в единицах HIMETRIC (в 01-миллиметровых добавках) рисунка, который будет храниться в расширенном метафайле.
lpszDescription
Указывает на строку с нуля, указывающую имя приложения, создавшего рисунок, а также название рисунка.
Возвращаемое значение
Дескриптор контекста устройства для расширенного метафайла, если он выполнен успешно; в противном случае ЗНАЧЕНИЕ NULL.
Замечания
Этот контроллер домена можно использовать для хранения независимого от устройства рисунка.
Windows использует эталонное устройство, определяемое параметром pDCRef , для записи разрешения и единиц устройства, на котором первоначально появилось изображение. Если параметр pDCRef имеет значение NULL, он использует текущее устройство отображения для справки.
Левая и верхняя части RECT
структуры данных, на которые указывает параметр lpBounds , должны быть меньше, чем правые и нижние члены соответственно. Точки вдоль краев прямоугольника включаются в рисунок. Если значение lpBounds равно NULL, графический интерфейс устройства (GDI) вычисляет размеры наименьшего прямоугольника, которое может заключать рисунок, нарисованный приложением. Параметр lpBounds должен быть предоставлен по возможности.
Строка, указываемая параметром lpszDescription , должна содержать пустой символ между именем приложения и именем рисунка и должен заканчиваться двумя пустыми символами, например "Редактор графики XYZ\0Bald Eagle\0\0\0", где \0 представляет пустой символ. Если значение lpszDescription равно NULL, в заголовке расширенного метафайла отсутствует соответствующая запись.
Приложения используют контроллер домена, созданный этой функцией, для хранения рисунка в расширенном метафайле. Дескриптор, определяющий этот контроллер домена, можно передать любой функции GDI.
После хранения изображения в расширенном метафайле приложение может отобразить изображение на любом выходном устройстве, вызвав функцию CDC::PlayMetaFile
. При отображении рисунка Windows использует прямоугольник, на который указывает параметр lpBounds , и данные разрешения с эталонного устройства для размещения и масштабирования рисунка. Контекст устройства, возвращаемый этой функцией, содержит те же атрибуты по умолчанию, связанные с любым новым контроллером домена.
Приложения должны использовать функцию Win32 GetWinMetaFileBits
для преобразования расширенного метафайла в старый формат метафайла Windows.
Имя файла для расширенного метафайла должно использовать . Расширение EMF.