数据对象和数据源:处理

在数据对象或数据源之后创建,可以对数据的许多常见操作,如插入,并移除的数据,枚举格式数据等等。本文介绍必要的技术来完成最常见的操作。主题包括:

  • 将数据插入到数据源

  • 确定格式用于表示某数据对象

  • 从数据对象检索数据

将数据插入到数据源

如何将数据插入到数据源取决于是否提供该数据立即或在需要时,因此,在哪中等其提供。可能如下所示。

9s5z33c4.collapse_all(zh-cn,VS.110).gif提供的数据立即 (立即呈现)

  • 重复需要 COleDataSource::CacheGlobalData 您提供数据的每个剪贴板格式。通过剪贴板格式要使用的,处理内存包含数据的,因此,可选择,描述数据的 FORMATETC 结构。

    - 或 -

  • 如果要直接与 STGMEDIUM framework 一起使用,则调用 COleDataSource::CacheData 而不是在上面选项卡的 COleDataSource::CacheGlobalData

9s5z33c4.collapse_all(zh-cn,VS.110).gif提供的数据在需要时 (延迟的呈现)

这是一个高级主题。

  • 重复需要 COleDataSource::DelayRenderData 您提供数据的每个剪贴板格式。通过剪贴板格式要使用的,因此,可选择,描述数据的 FORMATETC 结构。当数据请求,则框架将调用 COleDataSource::OnRenderData,必须重写。

    - 或 -

  • 如果使用的 CFile 对象提供数据,请调用 COleDataSource::DelayRenderFileData 而不是上一选项的 COleDataSource::DelayRenderData 。当数据请求,则框架将调用 COleDataSource::OnRenderFileData,必须重写。

确定格式用于表示某数据对象

在应用程序允许用户将该数据粘贴到之前,需要知道是否在它可以处理的剪贴板的格式。为此,应用程序应执行以下操作:

  1. 创建一 COleDataObject 对象和一 FORMATETC 结构。

  2. 调用数据对象的 AttachClipboard 成员函数将数据对象与剪贴板上的数据。

  3. 执行下列操作之一

    • 调用数据对象的 IsDataAvailable 成员函数,如果只有您需要的两个格式。,在剪贴板上的数据比您的应用程序的情况下,支持更格式这将为您节省时间。

      - 或 -

    • 调用数据对象的 BeginEnumFormats 成员函数开始枚举格式可用在剪贴板。然后调用 GetNextFormat ,直到剪贴板返回您的应用程序支持的格式或没有更多的格式。

如果使用 ON_UPDATE_COMMAND_UI,现在可以使粘贴,因此,可能,将在编辑菜单的特定项目。为此,请调用 CMenu::EnableMenuItemCCmdUI::Enable。有关的更多信息容器应用程序应如何处理菜单项,所以,当,请参见 菜单和资源:添加容器

从数据对象检索数据

一旦确定的数据格式,剩下的工作就是从数据对象检索数据。为此,该用户决定在何处放置数据,因此,应用程序调用适当的功能。数据在下面的媒体之一中可用:

调用函数

全局内存 (HGLOBAL)

COleDataObject::GetGlobalData

文件 (CFile)

COleDataObject::GetFileData

STGMEDIUM 结构 (IStorage)

COleDataObject::GetData

通常,即与其剪贴板格式都将指定。例如,需要一 STGMEDIUM 结构的 CF_EMBEDDEDSTRUCT 对象始终以中等的 IStorage 。因此,应使用 GetData ,因为它是可以接受 STGMEDIUM 结构中只有一个这些功能。

对剪贴板格式以中等的 IStream 或的 HGLOBAL 的情况下,框架可以提供引用数据的 CFile 指针。应用程序可以使用文件读取获取数据,与它可能从文件相同的方式导入数据。实质上,这是客户端界面对于数据源中的 OnRenderDataOnRenderFileData 实例。

用户立即将数据插入文档与其他数据以相同的格式。

9s5z33c4.collapse_all(zh-cn,VS.110).gif您想进一步了解什么?

请参见

参考

COleDataObject 类

COleDataSource 类

概念

数据对象和数据源(OLE)