2013-01-19 38 views
2

我将一些数据放入剪贴板,当我从剪贴板复制数据后,我想在不清除整个剪贴板的情况下清除数据。如何从剪贴板清除指定的格式数据?

类似的东西:

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()将清空一切!

在此先感谢!

回答

0

我在想你为什么要这样做。我不是Windows编程方面的专家,但我会尽力回答,因为在我看来,这个问题已经离开了“孤儿”,我可能会提供一些见解(希望我不会奇怪)。

据我了解,剪贴板是为了保持一个实体的几个替代表示(以不同的格式)。

什么是仅用于删除一个这样的表示?我会说什么是有道理的是要么删除所有的表示(通过EmptyClipboard())或没有。

可能你认为剪贴板是为了容纳几个不同类型的实体,这就是为什么你正在寻找一个选择性去除。恐怕这是一种误解,并不能反映剪贴板的真正目的。

+0

有许多用例从剪贴板中删除特定格式将非常有用。仅仅因为你无法想象这种情况并不意味着其他人不需要它们。 – user1580348

1

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

+0

谢谢你的回答,我该怎么做? – gglobulus