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。 其他可能的值包括以下内容。
返回代码 | 说明 |
---|---|
|
提供的 dwDirection 无效。 |
|
可用于此操作的内存不足。 |
|
不支持 dwDirection 指定的方向。 |
|
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 调用中接受或提供数据。
FORMATETC 的 tymed 成员通常表示可以接受多种存储介质。 应始终使用布尔 OR 运算符屏蔽和测试此。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | objidl.h |