在数据对象或创建数据源之后,可以对数据执行的常见操作,如插入,并移除的数据,如何枚举格式化数据等等。 本文描述必需的最常见技术来完成的操作。 主题包括:
插入到数据源中的数据
确定格式可用在数据对象
从数据对象检索数据
插入到数据源中的数据
数据如何插入数据源确定是否提供数据立即或在需要时,然后在其中进行媒体提供。 可能性如下所示。
提供的数据立即 (立即呈现)
所提供数据的每剪贴板格式的重复调用 COleDataSource::CacheGlobalData。 将剪贴板格式被使用的句柄,内存中的数据,因此,可选择,描述数据的结构 FORMATETC。
- 或 -
如果要直接使用 STGMEDIUM 结构。使用,则调用 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 |
通常,由媒体与其一起将剪贴板格式指定。 例如,CF_EMBEDDEDSTRUCT 对象需要一个始终位于 STGMEDIUM 结构媒体的 IStorage。 因此,使用 GetData,因为它能接受 STGMEDIUM 结构中只有一个这些函数。
对剪贴板格式在 IStream 或 HGLOBAL 媒体的情况,框架可提供引用数据的 CFile 指针。 应用程序然后可以使用读取文件获取数据,方法与可能导入数据文件的方式。 实质上,这样是客户端界面到数据源中 OnRenderData 和 OnRenderFileData 例程。
用户现在可以将数据插入文档与在同一格式的其他数据。