我正在尝试以下技巧:
IDataObject*
设置到剪贴板中,因此我正在使用OleSetClipboard()
将其设置到剪贴板中。CLIPFORMAT
我想要添加到剪贴板,但我无法使用OleSetClipboard()
执行此操作,因为我收到的IDataObject*
未实现SetData()
方法。因此,为了克服此限制,OpenClipboard()
与GetClipboardOwner()
一起,我可以SetClipboardData()
先将EmptyClipboard()
添加到剪贴板而不是OleGetClipboard()
。现在,一切正常,但会发生的事情是SetClipboardData()
没有使用GetClipboardData()
返回我放在剪贴板中的数据,但我可以使用IDataObject*
。
我可以想象为什么会发生这种情况(它只返回OleFlushClipboard()
),所以我尝试IDataObject*
删除OleGetClipboard()
和IDataObject*
再次让操作系统重建新的CLIPFORMAT
,仍然不包含 SetClipboardData()
添加的{{1}}。
有谁知道如何克服这个问题?还是另外一招?甚至解释为什么它这样工作?感谢
答案 0 :(得分:1)
我刚试过这个(在Windows 7上),它似乎可以工作,但只是跨进程:
在这两种情况下,调用OleFlushClipboard没有任何区别。
无论如何,这似乎不是一个非常强大的解决方案。你可以做的是创建自己的数据对象,响应它所知道的格式,并将其他格式委托给原始数据对象。 EnumFormatEtc方法将组合来自两个对象的格式,依此类推。 This article具有您可以扩展的简单数据对象的骨架。