次の方法で共有


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

IDataObjectインターフェイスは、データの消費者に、オブジェクトのデータの取得と設定、オブジェクトがサポートする形式の判断、およびオブジェクト内のデータが変更されたときの通知の登録と受信の方法を提供します。 データを取得するときに、呼び出し元はデータを表示する形式を指定できます。 ただし、データのソースは、呼び出し元によって提供されるoutパラメーターで返されるストレージメディアを決定します。

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

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

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

サポートする要素 使用
複合ドキュメント
IDataObject
ドラッグアンドドロップ転送
IDataObjectIDropSourceIDropTargetDoDragDrop(または同等のもの)
グローバルメモリのみを使用したクリップボード転送
クリップボードAPI
グローバルメモリ以外の交換媒体を使用したクリップボード転送。
IDataObject
現在はクリップボード転送が行われていますが、後でドラッグアンドドロップまたは複合ドキュメントを使用します。
IDataObjectと上記の「ドラッグアンドドロップ転送」のインターフェイスと関数

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

転送の受信側では、転送がドラッグアンドドロップかクリップボードによるものかによって、宛先はIDataObjectポインターをIDropTarget::Dropの呼び出しの引数として受け取るか、OleSetClipboard関数を呼び出して受け取ります。 このポインターを取得した後、宛先はIDataObject::EnumFormatEtcを呼び出して、取得可能な形式とそれらが取得できるメディアの種類を調べます。 この情報を手に入れた後、受信アプリケーションはIDataObject::GetDataを呼び出してデータを要求します。

データ転送