COleDataObject 类

在数据传输中用于从剪贴板、通过拖放或从嵌入 OLE 项检索各种格式的数据。

语法

class COleDataObject

成员

公共构造函数

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

公共方法

名称 描述
COleDataObject::Attach 将指定的 OLE 数据对象附加到 COleDataObject
COleDataObject::AttachClipboard 附加剪贴板上的数据对象。
COleDataObject::BeginEnumFormats 准备一个或多个后续 GetNextFormat 调用。
COleDataObject::Detach 分离关联的 IDataObject 对象。
COleDataObject::GetData 以指定的格式从附加的 OLE 数据对象复制数据。
COleDataObject::GetFileData 以指定的格式将数据从附加的 OLE 数据对象复制到 CFile 指针中。
COleDataObject::GetGlobalData 以指定的格式将数据从附加的 OLE 数据对象复制到 HGLOBAL 中。
COleDataObject::GetNextFormat 返回下一种可用数据格式。
COleDataObject::IsDataAvailable 检查数据是否以指定的格式提供。
COleDataObject::Release 分离并释放关联的 IDataObject 对象。

注解

COleDataObject 没有基类。

这些类型的数据传输包括源和目标。 数据源实现为 COleDataSource 类的对象。 每当目标应用程序中放入了数据或者它需要从剪贴板执行粘贴操作时,都必须创建 COleDataObject 类的对象。

使用此类可以确定数据是否以指定的格式存在。 还可以枚举可用的数据格式或检查给定的格式是否可用,然后以首选格式检索数据。 可通过多种不同的方式完成对象检索,包括使用 CFile、HGLOBAL 或 STGMEDIUM 结构。

有关详细信息,请参阅 Windows SDK 中的 STGMEDIUM 结构。

有关在应用程序中使用数据对象的详细信息,请参阅数据对象和数据源 (OLE) 一文。

继承层次结构

COleDataObject

要求

标头:afxole.h

COleDataObject::Attach

调用此函数可将 COleDataObject 对象与 OLE 数据对象相关联。

void Attach(
    LPDATAOBJECT lpDataObject,
    BOOL bAutoRelease = TRUE);

参数

lpDataObject
指向 OLE 数据对象。

bAutoRelease
如果在销毁 COleDataObject 对象时应释放 OLE 数据对象,则为 TRUE;否则为 FALSE。

备注

有关详细信息,请参阅 Windows SDK 中的 IDataObject

COleDataObject::AttachClipboard

调用此函数可将剪贴板上当前的数据对象附加到 COleDataObject 对象。

BOOL AttachClipboard();

返回值

如果成功,则不为 0;否则为 0。

注解

注意

调用此函数可锁定剪贴板,直到释放此数据对象。 数据对象在 COleDataObject 的析构函数中释放。 有关详细信息,请参阅 Win32 文档中的 OpenClipboardCloseClipboard

COleDataObject::BeginEnumFormats

调用此函数可准备后续的 GetNextFormat 调用以从项中检索数据格式列表。

void BeginEnumFormats();

备注

调用 BeginEnumFormats 后,将存储此数据对象支持的第一种格式的位置。 连续调用 GetNextFormat 会枚举数据对象中可用格式的列表。

若要检查给定格式的数据的可用性,请使用 COleDataObject::IsDataAvailable

有关详细信息,请参阅 Windows SDK 中的 IDataObject::EnumFormatEtc

COleDataObject::COleDataObject

构造 COleDataObject 对象。

COleDataObject();

注解

必须先调用 COleDataObject::AttachCOleDataObject::AttachClipboard,然后再调用其他 COleDataObject 函数。

注意

由于拖放处理程序的参数之一是指向 COleDataObject 的指针,因此无需调用此构造函数即可支持拖放。

COleDataObject::Detach

调用此函数可将 COleDataObject 对象与其关联的 OLE 数据对象相分离,而无需释放该数据对象。

LPDATAOBJECT Detach();

返回值

指向已分离的 OLE 数据对象的指针。

注解

COleDataObject::GetData

调用此函数可从指定格式的项中检索数据。

BOOL GetData(
    CLIPFORMAT cfFormat,
    LPSTGMEDIUM lpStgMedium,
    LPFORMATETC lpFormatEtc = NULL);

参数

cfFormat
返回数据的格式。 此参数可以是预定义的剪贴板格式之一,也可以是本机 Windows RegisterClipboardFormat 函数返回的值。

lpStgMedium
指向接收数据的 STGMEDIUM 结构。

lpFormatEtc
指向描述所要返回的数据的格式的 FORMATETC 结构。 如果你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息,请为此参数提供值。 如果此参数为 NULL,则默认值将用于 FORMATETC 结构中的其他字段。

返回值

如果成功,则不为 0;否则为 0。

注解

有关详细信息,请参阅 Windows SDK 中的 IDataObject::GetDataSTGMEDIUMFORMATETC

有关详细信息,请参阅 Windows SDK 中的 RegisterClipboardFormat

COleDataObject::GetFileData

调用此函数可创建 CFileCFile 派生对象,并将指定格式的数据检索到 CFile 指针中。

CFile* GetFileData(
    CLIPFORMAT cfFormat,
    LPFORMATETC lpFormatEtc = NULL);

参数

cfFormat
返回数据的格式。 此参数可以是预定义的剪贴板格式之一,也可以是本机 Windows RegisterClipboardFormat 函数返回的值。

lpFormatEtc
指向描述所要返回的数据的格式的 FORMATETC 结构。 如果你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息,请为此参数提供值。 如果此参数为 NULL,则默认值将用于 FORMATETC 结构中的其他字段。

返回值

如果成功,则返回指向包含数据的新 CFileCFile 派生对象的指针;否则返回 NULL。

注解

根据用于存储数据的媒体,返回值指向的实际类型可能是 CFileCSharedFileCOleStreamFile

注意

此函数的返回值访问的 CFile 对象由调用方拥有。 调用方负责对 CFile 对象运行 delete,从而关闭文件。

有关详细信息,请参阅 Windows SDK 中的 FORMATETC

有关详细信息,请参阅 Windows SDK 中的 RegisterClipboardFormat

COleDataObject::GetGlobalData

调用此函数可分配一个全局内存块,并将指定格式的数据检索到 HGLOBAL 中。

HGLOBAL GetGlobalData(
    CLIPFORMAT cfFormat,
    LPFORMATETC lpFormatEtc = NULL);

参数

cfFormat
返回数据的格式。 此参数可以是预定义的剪贴板格式之一,也可以是本机 Windows RegisterClipboardFormat 函数返回的值。

lpFormatEtc
指向描述所要返回的数据的格式的 FORMATETC 结构。 如果你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息,请为此参数提供值。 如果此参数为 NULL,则默认值将用于 FORMATETC 结构中的其他字段。

返回值

如果成功,则返回包含数据的全局内存块的句柄;否则返回 NULL。

注解

有关详细信息,请参阅 Windows SDK 中的 FORMATETC

有关详细信息,请参阅 Windows SDK 中的 RegisterClipboardFormat

COleDataObject::GetNextFormat

反复调用此函数可获取可用于从项中检索数据的所有格式。

BOOL GetNextFormat(LPFORMATETC lpFormatEtc);

参数

lpFormatEtc
指向函数调用返回时接收格式信息的 FORMATETC 结构。

返回值

如果另一种格式可用,则返回非零值;否则返回 0。

备注

调用 COleDataObject::BeginEnumFormats 后,将存储此数据对象支持的第一种格式的位置。 连续调用 GetNextFormat 会枚举数据对象中可用格式的列表。 使用这些函数可列出可用的格式。

若要检查给定格式的可用性,请调用 COleDataObject::IsDataAvailable

有关详细信息,请参阅 Windows SDK 中的 IEnumXXXX::Next

COleDataObject::IsDataAvailable

调用此函数可确定特定的格式是否可用于从 OLE 项中检索数据。

BOOL IsDataAvailable(
    CLIPFORMAT cfFormat,
    LPFORMATETC lpFormatEtc = NULL);

参数

cfFormat
要在 lpFormatEtc 指向的结构中使用的剪贴板数据格式。 此参数可以是预定义的剪贴板格式之一,也可以是本机 Windows RegisterClipboardFormat 函数返回的值。

lpFormatEtc
指向描述所需格式的 FORMATETC 结构。 只有当你希望指定由 cfFormat 指定的剪贴板格式以外的其他格式信息时,才为此参数提供值。 如果此参数为 NULL,则默认值将用于 FORMATETC 结构中的其他字段。

返回值

如果数据以指定的格式提供,则返回非零值;否则返回 0。

备注

在调用 GetDataGetFileDataGetGlobalData 之前,此函数很有用。

有关详细信息,请参阅 Windows SDK 中的 IDataObject::QueryGetDataFORMATETC

有关详细信息,请参阅 Windows SDK 中的 RegisterClipboardFormat

示例

请参阅 CRichEditView::QueryAcceptData 的示例。

COleDataObject::Release

调用此函数可释放先前与 COleDataObject 对象关联的 IDataObject 对象的所有权。

void Release();

备注

已通过显式调用 AttachAttachClipboard 或者通过框架将 IDataObjectCOleDataObject 相关联。 如果 Attach 的 bAutoRelease 参数为 FALSE,则不会释放 IDataObject 对象。 在这种情况下,调用方负责通过调用 IUnknown::Release 来释放 IDataObject

另请参阅

MFC 示例 HIERSVR
MFC 示例 OCLIENT
层次结构图
COleDataSource 类
COleClientItem 类
COleServerItem 类