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


Класс 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разделе "Контексты устройств".

Иерархия наследования

CObject

CDC

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();

Замечания

Сначала вызовите, а затем вызовCMetaFileDCCreate, который создает контекст устройства метафайла 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.

См. также

Класс CDC
Диаграмма иерархии