次の方法で共有


データ転送インターフェイス

IDataObject インターフェイスは、データのコンシューマーに、オブジェクトのデータの取得と設定、オブジェクトがサポートする形式の決定、およびオブジェクト内のデータが変更されたときに通知を登録および受信するためのメソッドを提供します。 データを取得するときに、呼び出し元はデータをレンダリングする形式を指定できます。 ただし、データのソースは、呼び出し元によって提供される out パラメーターで返されるストレージ メディアを決定します。

IDataObjectは、アプリケーションで Windows クリップボード転送または複合ドキュメント転送を実装するために必要なすべてのツールを提供します。 また、ドラッグ アンド ドロップ転送をサポートする場合は、IDataObject と共に IDropSource および IDropTargetインターフェイス実装する必要があります。

IDataObject インターフェイスと OLE クリップボード API を組み合わせることで、Windows クリップボード API のすべての機能が提供されます。 通常、両方のクリップボード API を使用する必要はありません。 ドラッグ アンド ドロップ転送または OLE 複合ドキュメントをサポートするデータ サプライヤーは、IDataObject インターフェイスを実装する必要があります。 アプリケーションでクリップボードの転送のみがサポートされているが、後のリリースでドラッグ アンド ドロップまたは複合ドキュメントを追加する場合は、後で再コーディングとデバッグに費やされる時間を最小限に抑えるために、IDataObject と OLE クリップボード API を実装することをお勧めします。 また、グローバル メモリ以外 転送メディアを利用するために、IDataObject を実装することもできます。

次の表は、サポートするデータ転送の種類に応じて、使用するものをまとめたものです。

サポートするには 使う
複合ドキュメント
IDataObject
ドラッグ アンド ドロップ転送
IDataObject、IDropSourceIDropTargetDoDragDrop (またはそれに相当) をします。
グローバル メモリのみを使用したクリップボード転送
クリップボード API
グローバル メモリ以外の交換メディアを使用してクリップボードを転送します。
IDataObject
クリップボードを転送するが、後でドキュメントをドラッグ アンド ドロップまたは複合する
IDataObjectと、上記の 「ドラッグ アンド ドロップ転送」のインターフェイスと関数をする

ユーザーがデータ転送操作を開始すると、ソース アプリケーションは IDataObjectのインスタンスを作成し、それを介してデータを 1 つ以上の形式で使用できるようにします。 クリップボード転送では、アプリケーションは oleSetClipboard関数呼び出して、データ オブジェクト ポインターを OLE に渡します。 (OleSetClipboard では、OLE バージョン 1 と OLE 以外のアプリケーションの両方に標準のクリップボード データ形式も提供されます)。ドラッグ アンド ドロップ転送では、アプリケーションは代わりに DoDragDrop 関数を呼び出します。

転送の受信側では、転送先は、IDropTarget::D ropの呼び出しの引数として、または転送がドラッグ アンド ドロップまたはクリップボードによって行われるかどうかに応じて、OleSetClipboard 関数を呼び出すことによって、IDataObject ポインターを受け取ります。 このポインターを取得すると、宛先は IDataObject::EnumFormatEtc呼び出して、取得できる形式と取得できるメディアの種類を学習します。 この情報を使用して、受信側のアプリケーションは、IDataObject::GetData呼び出しでデータを要求します。

データ転送