如何从剪贴板中清除指定的格式数据?

时间:2013-01-19 21:44:56

标签: c++ windows winapi

我将一些数据放入剪贴板,从剪贴板复制数据后,我想清除数据而不清除整个剪贴板。

类似的东西:

wchar_t* buf=NULL;
if( OpenClipboard(NULL)!=0)
{
HANDLE hData = GetClipboardData( CF_UNICODETEXT );
buf = (wchar_t*)GlobalLock( hData );
GlobalUnlock( hData );
CloseClipboard();
return buf;
} 

//job is done, and now I want to clear only hData!

据我了解,EmptyClipboard()将清空所有内容!

提前致谢!

2 个答案:

答案 0 :(得分:1)

剪贴板一次只能容纳一个IDataObject;此数据对象可以呈现多种数据格式,但它只是一个COM对象。执行所需操作的唯一方法是复制现有数据对象(减去要删除的格式),并将其设置为剪贴板以代替原始数据。

答案 1 :(得分:0)

我想知道你为什么要这样做。我不是Windows编程方面的专家,但无论如何我都会尝试回答,因为在我看来这个问题一直是“孤儿”,我可能会提供一些见解(希望我没有被误解)。

据我了解,剪贴板旨在保存一个实体的多个替代表示(采用不同格式)。

仅删除一个此类表示的用例是什么?我会说有意义的是删除所有表示(通过EmptyClipboard())或没有。

可能您认为剪贴板是为了容纳不同类型的几个实体,这就是您正在寻找选择性删除的原因。我担心这是一种误解,并不能反映剪贴板的真正目的。