3

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

像这样的东西:

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() 将清空所有内容!

提前致谢!

4

2 回答 2

2

剪贴板一次只能保存一个IDataObject;此数据对象可以呈现多种数据格式,但它只是一个 COM 对象。做你想做的唯一方法是复制现有的数据对象(减去你想要删除的格式)并将其设置到剪贴板来代替原始数据。

于 2013-01-20T01:33:05.080 回答
0

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

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

仅删除一种此类表示的用例是什么?我想说的是,要么删除所有表示(通过EmptyClipboard()),要么不删除。

可能您认为剪贴板旨在保存多个不同类型的实体,这就是您正在寻找选择性删除的原因。恐怕这是一种误解,并不能反映剪贴板的真正用途。

于 2013-01-19T22:28:26.630 回答