OleSetClipboard 函数 (ole2.h)

将指向特定数据对象的指针放在剪贴板上。 这使数据对象可供 OleGetClipboard 函数访问。

语法

HRESULT OleSetClipboard(
  [in] LPDATAOBJECT pDataObj
);

parameters

[in] pDataObj

指向数据对象上的 IDataObject 接口的指针,可以从该对象获取要放置在剪贴板上的数据。 此参数可以为 NULL;在这种情况下,剪贴板将被清空。

返回值

此函数在成功时返回S_OK。 其他可能的值包括以下内容。

返回代码 说明
CLIPBRD_E_CANT_OPEN
OleSetClipboard 中使用的 OpenClipboard 函数失败。
CLIPBRD_E_CANT_EMPTY
OleSetClipboard 中使用的 EmptyClipboard 函数失败。
CLIPBRD_E_CANT_CLOSE
OleSetClipboard 中使用的 CloseClipboard 函数失败。
CLIPBRD_E_CANT_SET
OleSetClipboard 中使用的 SetClipboardData 函数失败。

注解

如果要编写可充当剪贴板操作源的应用程序,则必须执行以下操作:

  • 创建一个数据对象 (,该对象是 IDataObject 接口,) 要复制到剪贴板或剪切到剪贴板的数据。 此对象应与 OLE 拖放操作中使用的对象相同。
  • 调用 OleSetClipboardIDataObject 指针放在剪贴板上,以便 OleGetClipboard 函数可以访问该指针。 OleSetClipboard 还会对数据对象调用 IUnknown::AddRef 方法。
  • 如果需要,请在将数据对象放在剪贴板上后释放数据对象,以释放应用程序中的 IUnknown::AddRef 计数器。
  • 如果用户正在剪切数据 (将其从文档中删除并将其放入剪贴板) ,请从文档中删除数据。
所有格式都使用延迟呈现在剪贴板上提供, (剪贴板仅包含指向数据对象的指针,除非调用 OleFlushClipboard 将数据呈现到剪贴板) 。 OLE 1 兼容性所需的格式是从存在且也放在剪贴板上的 OLE 2 格式合成的。

OleSetClipboard 函数将剪贴板的所有权分配给内部 OLE 窗口句柄。 数据对象的引用计数增加 1,以启用延迟呈现。 引用计数通过调用 OleFlushClipboard 函数或后续调用 OleSetClipboard (将 NULL 指定为参数值)来减少引用计数, (这将清除剪贴板) 。

当应用程序通过) 调用 OpenClipboard 函数直接或间接打开剪贴板 (时,在关闭剪贴板之前,任何其他应用程序都无法使用剪贴板。 如果剪贴板当前由另一个应用程序打开, 则 OleSetClipboard 将失败。 内部 OLE 窗口句柄通过将消息委托给剪贴板上数据对象的 IDataObject 实现来满足WM_RENDERFORMAT消息。

NULL 指定为 OleSetClipboard 的参数值会清空当前剪贴板。 如果剪贴板的内容是上一个 OleSetClipboard 调用的结果,并且剪贴板已释放,则会释放传递给上一个调用的 IDataObject 指针。 剪贴板所有者应将此用作它之前提供的数据不再位于剪贴板上的信号。

如果在应用程序关闭后需要将数据保留在剪贴板上,则应调用 OleFlushClipboard,而不是使用 NULL 参数值调用 OleSetClipboard

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 ole2.h
Library Ole32.lib
DLL Ole32.dll
API 集 Windows 10版本 10.0.15063 中引入的 ext-ms-win-com-ole32-l1-1-5 ()

请参阅

OleFlushClipboard

OleGetClipboard

OleIsCurrentClipboard