剪贴板:复制和粘贴数据

本主题介绍在 OLE 应用程序中实现从剪贴板复制和粘贴所需的最低工作。 建议先阅读数据对象和数据源 (OLE) 主题,然后再继续操作。

在实现复制或粘贴之前,必须先提供函数来处理“编辑”菜单上的“复制”、“剪切”和“粘贴”选项。

复制或剪切数据

将数据复制到剪贴板

  1. 确定要复制的数据是本机数据还是嵌入项或链接项。

    • 如果数据嵌入或链接,请获取指向所选 COleClientItem 对象的指针。

    • 如果数据是本机数据,并且应用程序是服务器,请创建派生自 COleServerItem (包含所选数据)的新对象。 否则,请为数据创建一个 COleDataSource 对象。

  2. 调用所选项的 CopyToClipboard 成员函数。

  3. 如果用户选择了“剪切”操作而不是“复制”操作,请从应用程序中删除所选数据。

若要查看此序列的示例,请参阅 MFC OLE 示例程序 OCLIENTHIERSVR 中的 OnEditCutOnEditCopy 函数。 请注意,这些示例保留指向当前所选数据的指针,因此步骤 1 已经完成。

正在粘贴数据

粘贴数据比复制数据要复杂得多,因为需要选择将数据粘贴到应用程序中的格式。

从剪贴板检索数据

  1. 在视图类中,实现 OnEditPaste 以处理从“编辑”菜单中选择“粘贴”选项的用户。

  2. OnEditPaste 函数中,创建一个 COleDataObject 对象并调用其 AttachClipboard 成员函数,以将此对象链接到剪贴板上的数据。

  3. 调用 COleDataObject::IsDataAvailable 以检查特定格式是否可用。

    或者,可以使用 COleDataObject::BeginEnumFormats 查找其他格式,直到找到最适合应用程序的格式。

  4. 执行格式的粘贴。

有关工作原理的示例,请参阅 MFC OLE 示例程序 OCLIENTHIERSVR 中定义的视图类中的 OnEditPaste 成员函数的实现。

提示

将粘贴操作分离到其自己的函数的主要好处是,在拖放操作期间在应用程序中删除数据时,可以使用相同的粘贴代码。 与 OCLIENT 和 HIERSVR 中一样,函数 OnDrop 还可以调用 DoPasteItem、重用写入以实现粘贴操作的代码。

若要处理“编辑”菜单上的“选择性粘贴”选项,请参阅主题 OLE 中的对话框

你想进一步了解什么

另请参阅

剪贴板:使用 OLE 剪贴板机制