win32 プログラムのデータをクリップボードにコピーする場合、クリップボードにコピーしたメモリを別の場所に貼り付けた後で解放する必要がありますか? またはシステムがこれを担当します。
4 に答える
SetClipboardData が成功すると、システムは hMem パラメーターで識別されるオブジェクトを所有します。所有権がシステムに転送されると、アプリケーションはデータに書き込みまたは解放することはできません。
アプリを閉じるときにクリップボードから削除できるように、クリップボードのデータを追跡することは完全にオプションです。データがクリップボードに保存されると、システムがそれを所有し、アプリとは別になります。そのため、アプリを閉じた後も引き続き使用できるように、クリップボードに残すことを選択できます。遅延レンダリングを使用していない限り、他のアプリから要求されたときにデータをレンダリングするためにアプリが実行されなくなるため、アプリを閉じるときにクリップボードから削除することは理にかなっています。
クリップボードにデータを配置する場合、アプリケーションはクリップボード上のデータを処理する責任があります。これが、Microsoft Office などの多くのアプリケーションが、アプリケーションを終了するときに、大量のデータをクリップボードに保持するかどうかを尋ねる理由です。
ただし、後でユーザーがクリップボード上のデータを別の場所で必要とするかどうかわからないため、ユーザーとの対話を強くお勧めします。
これは通常、システムによって行われますが、一部の責任あるアプリケーションは、終了する前にユーザーにクリップボードを解放するよう求めることも行います。
たとえば、MSWord は終了する前に、データをメモリに保持するかどうかをユーザーに尋ねます。汎用の場合はシステムにお任せください。
ここで、ユーザーが (アプリケーションを閉じた後でも) クリップボードに保存したい場合があるので、それを壊してメモリから削除しないでください。