3

一部のデータを clipboard に入れました。クリップボードからデータをコピーした後、クリップボード全体をクリアせずにデータをクリアしたいと考えています。

そんな感じ:

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に 1 つのみ保持します。このデータ オブジェクトは複数のデータ形式を表すことができますが、単一の COM オブジェクトにすぎません。必要なことを行う唯一の方法は、既存のデータ オブジェクト (削除する形式を除く) を複製し、それを元のデータ オブジェクトの代わりにクリップボードに設定することです。

于 2013-01-20T01:33:05.080 に答える
0

なぜあなたはこれをしたいのだろうかと思います。私はWindowsプログラミングの専門家ではありませんが、この質問は「孤立」したままであり、洞察を提供する可能性があるため、とにかく答えようとします(私が見事に誤解されていないことを願っています)。

私が理解している限り、クリップボードは1つのエンティティのいくつかの代替表現(異なる形式)を保持することを目的としています。

そのような表現を1つだけ削除するユースケースは何ですか?理にかなっているのは、すべての表現を(からEmptyClipboard())削除するか、まったく削除しないことです。

おそらくあなたはクリップボードが異なるタイプのいくつかのエンティティを保持することを意図していると考えています、そしてこれがあなたが選択的な除去を探している理由です。これは誤解であり、クリップボードの本来の目的を反映していないのではないかと思います。

于 2013-01-19T22:28:26.630 に答える