CMetaFileDC 类

实现一个 Windows 图元文件,此文件包含一系列图形设备接口 (GDI) 命令,你可以重播此命令来创建所需图像或文本。

语法

class CMetaFileDC : public CDC

成员

公共构造函数

名称 描述
CMetaFileDC::CMetaFileDC 构造 CMetaFileDC 对象。

公共方法

名称 描述
CMetaFileDC::Close 关闭设备上下文并创建图元文件句柄。
CMetaFileDC::CloseEnhanced 关闭增强型图元文件设备上下文并创建增强型图元文件句柄。
CMetaFileDC::Create 创建 Windows 图元文件设备上下文并将其附加到 CMetaFileDC 对象。
CMetaFileDC::CreateEnhanced 为增强格式图元文件创建图元文件设备上下文。

备注

若要实现 Windows 图元文件,请先创建 CMetaFileDC 对象。 调用 CMetaFileDC 构造函数,然后调用 Create 成员函数,该函数会创建 Windows 图元文件设备上下文并将其附加到 CMetaFileDC 对象。

接下来,向 CMetaFileDC 对象发送你打算让它重播的 CDC GDI 命令序列。 只能使用哪些创建输出的 GDI 命令,例如 MoveToLineTo

将所需命令发送到图元文件后,调用 Close 成员函数,该函数会关闭图元文件设备上下文并返回图元文件句柄。 然后释放 CMetaFileDC 对象。

CDC::PlayMetaFile 可以使用图元文件句柄重复播放图元文件。 图元文件还可以由 Windows 函数(例如 CopyMetaFile,它会将图元文件复制到磁盘)进行操作。

不再需要图元文件时,请使用 DeleteMetaFile Windows 函数将它从内存中删除。

还可以实现 CMetaFileDC 对象,以便它可以处理输出调用和属性 GDI 调用(例如 GetTextExtent)。 此类图元文件更灵活,可以更轻松地重复使用常规 GDI 代码(通常由输出和属性调用的混合组成)。 CMetaFileDC 类会从 CDC 继承两个设备上下文(m_hDCm_hAttribDC)。 m_hDC 设备上下文会处理所有 CDC GDI 输出调用,而 m_hAttribDC 设备上下文会处理所有 CDC GDI 属性调用。 通常,这两个设备上下文引用相同设备。 对于 CMetaFileDC,属性 DC 默认设置为 NULL。

创建指向屏幕、打印机或图元文件以外的其他设备的第二个设备上下文,然后调用 SetAttribDC 成员函数以将新设备上下文与 m_hAttribDC 关联。 对信息的 GDI 调用现在会定向到新 m_hAttribDC。 输出 GDI 调用会转到 m_hDC(表示图元文件)。

有关 CMetaFileDC 的详细信息,请参阅设备上下文

继承层次结构

CObject

CDC

CMetaFileDC

要求

标头:afxext.h

CMetaFileDC::Close

关闭图元文件设备上下文并创建 Windows 图元文件句柄,该句柄可用于使用 CDC::PlayMetaFile 成员函数播放图元文件。

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;否则为 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 单位,增量为 0.01 毫米)。

lpszDescription
指向以零结尾的字符串,该字符串指定创建图片的应用程序的名称以及图片的标题。

返回值

如果成功,则为增强型图元文件的设备上下文的句柄;否则为 NULL。

注解

此 DC 可用于存储独立于设备的图片。

Windows 使用 pDCRef 参数标识的引用设备来记录最初显示图片的设备的分辨率和单位。 如果 pDCRef 参数为 NULL,则它使用当前显示设备进行引用。

lpBounds 参数指向的 RECT 数据结构的左成员和上成员必须分别小于右成员和下成员。 矩形边缘的点包含在图片中。 如果 lpBounds 为 NULL,则图形设备接口 (GDI) 会计算可以包围应用程序所绘制图片的最小矩形的尺寸。 应尽可能提供 lpBounds 参数。

lpszDescription 参数指向的字符串必须在应用程序名称与图片名称之间包含空字符,并且必须以两个空字符结尾(例如“XYZ Graphics Editor\0Bald Eagle\0\0”,其中 \0 表示空字符)。 如果 lpszDescription 为 NULL,则增强型图元文件标头中没有对应条目。

应用程序会使用此函数创建的 DC 将图形图片存储在增强型图元文件中。 标识此 DC 的句柄可以传递给任何 GDI 函数。

应用程序将图片存储在增强型图元文件中后,它可以通过调用 CDC::PlayMetaFile 函数在任何输出设备上显示图片。 显示图片时,Windows 会使用 lpBounds 参数指向的矩形以及来自引用设备的分辨率数据来定位和缩放图片。 此函数返回的设备上下文包含与任何新 DC 关联的相同默认属性。

应用程序必须使用 Win32 GetWinMetaFileBits 函数将增强型图元文件转换为较旧的 Windows 图元文件格式。

增强型图元文件的文件名应使用 .EMF 扩展名。

另请参阅

CDC 类
层次结构图