数据对象和数据源:处理
在数据对象或数据源之后创建,可以对数据的许多常见操作,如插入,并移除的数据,枚举格式数据等等。本文介绍必要的技术来完成最常见的操作。主题包括:
将数据插入到数据源
确定格式用于表示某数据对象
从数据对象检索数据
将数据插入到数据源
如何将数据插入到数据源取决于是否提供该数据立即或在需要时,因此,在哪中等其提供。可能如下所示。
提供的数据立即 (立即呈现)
重复需要 COleDataSource::CacheGlobalData 您提供数据的每个剪贴板格式。通过剪贴板格式要使用的,处理内存包含数据的,因此,可选择,描述数据的 FORMATETC 结构。
- 或 -
如果要直接与 STGMEDIUM framework 一起使用,则调用 COleDataSource::CacheData 而不是在上面选项卡的 COleDataSource::CacheGlobalData 。
提供的数据在需要时 (延迟的呈现)
这是一个高级主题。
重复需要 COleDataSource::DelayRenderData 您提供数据的每个剪贴板格式。通过剪贴板格式要使用的,因此,可选择,描述数据的 FORMATETC 结构。当数据请求,则框架将调用 COleDataSource::OnRenderData,必须重写。
- 或 -
如果使用的 CFile 对象提供数据,请调用 COleDataSource::DelayRenderFileData 而不是上一选项的 COleDataSource::DelayRenderData 。当数据请求,则框架将调用 COleDataSource::OnRenderFileData,必须重写。
确定格式用于表示某数据对象
在应用程序允许用户将该数据粘贴到之前,需要知道是否在它可以处理的剪贴板的格式。为此,应用程序应执行以下操作:
创建一 COleDataObject 对象和一 FORMATETC 结构。
调用数据对象的 AttachClipboard 成员函数将数据对象与剪贴板上的数据。
执行下列操作之一
调用数据对象的 IsDataAvailable 成员函数,如果只有您需要的两个格式。,在剪贴板上的数据比您的应用程序的情况下,支持更格式这将为您节省时间。
- 或 -
调用数据对象的 BeginEnumFormats 成员函数开始枚举格式可用在剪贴板。然后调用 GetNextFormat ,直到剪贴板返回您的应用程序支持的格式或没有更多的格式。
如果使用 ON_UPDATE_COMMAND_UI,现在可以使粘贴,因此,可能,将在编辑菜单的特定项目。为此,请调用 CMenu::EnableMenuItem 或 CCmdUI::Enable。有关的更多信息容器应用程序应如何处理菜单项,所以,当,请参见 菜单和资源:添加容器。
从数据对象检索数据
一旦确定的数据格式,剩下的工作就是从数据对象检索数据。为此,该用户决定在何处放置数据,因此,应用程序调用适当的功能。数据在下面的媒体之一中可用:
中 |
调用函数 |
---|---|
全局内存 (HGLOBAL) |
COleDataObject::GetGlobalData |
文件 (CFile) |
COleDataObject::GetFileData |
STGMEDIUM 结构 (IStorage) |
COleDataObject::GetData |
通常,即与其剪贴板格式都将指定。例如,需要一 STGMEDIUM 结构的 CF_EMBEDDEDSTRUCT 对象始终以中等的 IStorage 。因此,应使用 GetData ,因为它是可以接受 STGMEDIUM 结构中只有一个这些功能。
对剪贴板格式以中等的 IStream 或的 HGLOBAL 的情况下,框架可以提供引用数据的 CFile 指针。应用程序可以使用文件读取获取数据,与它可能从文件相同的方式导入数据。实质上,这是客户端界面对于数据源中的 OnRenderData 和 OnRenderFileData 实例。
用户立即将数据插入文档与其他数据以相同的格式。