次の方法で共有


データ オブジェクトとデータ ソース : 作成と破棄

技術情報 データ オブジェクトとデータ ソース (OLE)で説明しているように、データ オブジェクトとデータ ソースは、データ転送の両側を表します。この技術情報では、データ転送を正しく実行するためにこれらのオブジェクトとソースを作成し、いつ破棄するか示しました。以下が含まれています:

  • データ オブジェクトの作成

  • データ オブジェクトの破棄

  • データ ソースの作成

  • 破棄のデータ ソース

データ オブジェクトの作成

データ オブジェクトがターゲット アプリケーションによって —クライアントとサーバーが使用されます。ターゲット アプリケーションのデータ ソース オブジェクトは、アプリケーションとターゲット アプリケーション間の接続の 1 種類の末尾です。データ ソースのデータにアクセスし、対話にターゲット アプリケーションのデータ オブジェクトが使用されています。

データ オブジェクトが必要な 2 とおりの状況があります。最初の状況でデータがドラッグ アンド ドロップを使用してアプリケーションにドロップしたときです。2 番目の状況で、貼り付けや特別な貼り付けが編集] メニューから選択された場合です。

ドラッグ アンド ドロップの場合、データ オブジェクトを作成する必要はありません。既存のデータ オブジェクトへのポインターが OnDrop の関数に渡されます。このデータ オブジェクトは、ドラッグ アンド ドロップ操作の一部として、フレームワークにより作成され、それによって破棄されます。これは、貼り付けることが他のメソッドによってすると、常にではありません。詳細については、 データ オブジェクトの破棄を参照してください。

アプリケーションが貼り付けまたは貼り付けなどの特殊操作を実行すると、 COleDataObject のオブジェクトを作成し、 AttachClipboard のメンバー関数をダイヤルする必要があります。これは、クリップボードのデータとデータ オブジェクトを関連付けます。貼り付け関数で、このデータ オブジェクトを使用できます。

例にはこれがどのようにするか、 MFC OLE サンプル OCLIENTの一部である MAINVIEW.CPP ファイルの DoPasteItem 関数を参照してください。OCLIENT は、すべての貼り付け操作を実行し、 OnPasteLinkOnDropOnPasteおよび関数からの DoPasteItem をダイヤルする関数を実行します。OnDrop に、渡されるデータ オブジェクトにポインターがあるため DoPasteItemへのポインターを渡します。このパラメーターのOnPaste 、クリップボードにデータ オブジェクトを作成し、接続するように DoPasteItem を示す OnPasteLink のパス NULL 。このメソッドは、貼り付けコードを分離するため、 1 か所にできます。また、デバッグは、両方の種類の貼り付け操作で使用できます。

データ オブジェクトの破棄

データ オブジェクトの作成で説明されている方法に従ってデータ オブジェクトを破棄するには、データ転送の重要な側面です。貼り付け関数で作成されたデータ オブジェクトは、 MFC によってと貼り付けの関数の戻り値破棄されます。

貼り付け操作を処理する別のメソッドに従った場合、貼り付け操作が完了したらデータ オブジェクトが破棄されることを確認します。データ オブジェクトが破棄されるまで、アプリケーションが正常にクリップボードにデータをコピーできない。

データ ソースの作成

データ ソースは、データ転送のクライアントまたはサーバー側になることができるデータ転送のソースによって使用されます。ソース アプリケーションのデータ ソースは、アプリケーション ソースとターゲット アプリケーション間の接続の 1 種類の末尾です。データ ソースのデータと対話するために対象アプリケーションのデータ オブジェクトが使用されています。

データ ソースは、アプリケーションがデータをクリップボードにコピーする必要があるときに作成されます。一般的なシナリオは次のように動作します:

  1. ユーザーは、データを選択します。

  2. ユーザーは 編集 のメニューから コピー(&&C),コピー (または 切り取り)を選択して、ドラッグ アンド ドロップ操作を開始します。

  3. プログラムの設計により、アプリケーションは COleDataSourceから派生したクラスの COleDataSource オブジェクトまたはオブジェクトを作成します。

  4. 選択したデータはデータ ソースに COleDataSource::CacheData または COleDataSource::DelayRenderData のグループの関数の 1 種類を呼び出すことによって挿入されます。

  5. アプリケーションは、ドラッグ アンド ドロップ操作の場合は、手順 3. で作成されたオブジェクトに属する SetClipboard のメンバー関数 (または DoDragDrop のメンバー関数)をダイヤルします。

  6. これが 切り取り 操作または DoDragDrop の戻り DROPEFFECT_MOVE場合は、手順 1 で選択したデータはドキュメントから削除されます。

このシナリオでは、 MFC OLE のサンプル OCLIENTHIERSVRによって実装されます。各アプリケーションの CViewをソース - すべて GetClipboardDataOnGetClipboardData の関数の派生クラスを参照してください。この二つの関数は COleClientItemCOleServerItem派生クラスの実装にあります。これらのサンプル プログラムは、の良い例は、これらの概念を実行できます。

COleDataSource のオブジェクトを作成できる 1 つが他の状況でドラッグ アンド ドロップ操作の既定の動作を変更した場合に発生します。詳細については、 ドラッグ アンド ドロップ: カスタマイズ の技術情報 " を参照してください。

破棄のデータ ソース

データ ソースは、を行うアプリケーションによって現在破棄する必要があります。COleDataSource::DoDragDropの呼び出しなどの OLE にデータ ソースを渡す場合、 pDataSrc->InternalReleaseをダイヤルする必要があります。次に例を示します。

void CMyListView::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
   UNREFERENCED_PARAMETER(pResult);

   LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

   CMyDataSource* pDataSrc = new CMyDataSource();
   if (NULL != pDataSrc)
   {
      pDataSrc->Initialize(pNMLV, this);
      pDataSrc->DelayRenderData(
         (CLIPFORMAT)RegisterClipboardFormat(_T("TIGroupFiles")));
      pDataSrc->DoDragDrop();
      pDataSrc->InternalRelease();
   }
}

OLE にデータ ソースを渡さなかったら、一般的な C++ のオブジェクトと同様に、破棄があります。

詳細については、 ドラッグ アンド ドロップクリップボードデータ オブジェクトの操作とデータ ソースを参照してください。

参照

関連項目

COleDataObject クラス

COleDataSource クラス

概念

データ オブジェクトとデータ ソース (OLE)