IDataObject::EnumFormatEtc 方法 (objidl.h)

创建对象以枚举数据对象支持的格式。

语法

HRESULT EnumFormatEtc(
  [in]  DWORD          dwDirection,
  [out] IEnumFORMATETC **ppenumFormatEtc
);

参数

[in] dwDirection

数据的方向。 可能的值来自 DATADIR 枚举。

值DATADIR_GET枚举可以传入到 对 IDataObject::GetData 的调用的格式。 值DATADIR_SET枚举那些可以传递给 IDataObject::SetData 调用的格式。

[out] ppenumFormatEtc

指向 IEnumFORMATETC 指针变量的指针,该变量接收指向新枚举器对象的接口指针。

返回值

此方法在成功时返回S_OK。 其他可能的值包括以下内容。

返回代码 说明
E_INVALIDARG
提供的 dwDirection 无效。
E_OUTOFMEMORY
可用于此操作的内存不足。
E_NOTIMPL
不支持 dwDirection 指定的方向。
OLE_S_USEREG
OLE 枚举注册表中的格式的请求。

注解

EnumFormatEtc 创建一个枚举器对象,该对象可用于确定数据对象描述 FORMATETC 结构中的数据的所有方式,并提供指向其 IEnumFORMATETC 接口的指针。 这是标准枚举器接口之一。

给调用方的说明

获取指针后,调用方可以通过调用 IEnumFORMATETC 的枚举方法枚举 FORMATETC 结构。 由于格式可能会随时间而变化,因此无法保证当前支持枚举格式,因为格式可能会随时间而更改。 因此,应用程序应将枚举视为可传递的格式类型的提示。 调用方负责在枚举器完成时调用 Release

发生下列操作之一时,将调用 EnumFormatEtc

  • 应用程序调用 OleSetClipboard。 OLE 必须确定要在剪贴板上放置哪些数据,以及是否需要在剪贴板上放置 OLE 1 兼容性格式。
  • 正在从剪贴板粘贴数据或删除数据。 应用程序使用第一种可接受的格式。
  • 将显示“ 选择性粘贴 ”对话框。 目标应用程序从 FORMATETC 条目生成格式列表。

实施者说明

格式可以在注册表中静态注册,也可以在对象初始化期间动态注册。 如果对象具有不变的格式列表,并且这些格式已在注册表中注册,则 OLE 提供 FORMATETC 枚举对象的实现,该对象可以枚举在注册表中的特定 CLSID 下注册的格式。 通过调用帮助程序函数 OleRegEnumFormatEtc,可以使用指向其 IEnumFORMATETC 接口的指针。 因此,在这种情况下,只需调用此函数即可实现 EnumFormatEtc 方法。

EXE 应用程序可以通过实现 方法来有效地执行相同的操作,以返回值OLE_S_USEREG。 此返回值指示默认对象处理程序调用 OleRegEnumFormatEtc。 作为 DLL 对象应用程序实现的对象应用程序不能返回OLE_S_USEREG,因此必须直接调用 OleRegEnumFormatEtc

如果专用格式注册到注册表中的 RequestDataFormats 或 SetDataFormats 键,则可以枚举 OLE 1 对象的专用格式。 此外,如果 OLE 对象注册到 GetDataFormats 或 SetDataFormats 密钥,则可以为 OLE 对象枚举 (OLE 对象) 的所有版本。

对于服务器未在注册表中注册 RequestDataFormats 或 SetDataFormats 信息的 OLE 1 对象,对传递 DATADIR_GET 的 EnumFormatEtc 的调用仅枚举本机和图元文件格式,无论它们是否支持这些格式或其他格式。 调用对此类对象传递DATADIR_SET的 EnumFormatEtc 仅枚举本机,而不管对象是否支持使用其他格式进行设置。

枚举返回的 FORMATETC 结构通常指示 null 目标设备 (ptd) 。 这很合适,因为与 FORMATETC 的其他成员不同,目标设备不会参与对象的决策,即它是否可以在 SetData 或 GetData 调用中接受或提供数据。

FORMATETCtymed 成员通常表示可以接受多种存储介质。 应始终使用布尔 OR 运算符屏蔽和测试此。

要求

要求
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 objidl.h

另请参阅

FORMATETC

IDataObject::GetData

IDataObject::SetData

IEnumFORMATETC

OleRegEnumFormatEtc