データ オブジェクトとデータ ソース : 作成と破棄
技術情報 データ オブジェクトとデータ ソース (OLE)で説明しているように、データ オブジェクトとデータ ソースは、データ転送の両側を表します。この技術情報では、データ転送を正しく実行するためにこれらのオブジェクトとソースを作成し、いつ破棄するか示しました。以下が含まれています:
データ オブジェクトの作成
データ オブジェクトの破棄
データ ソースの作成
破棄のデータ ソース
データ オブジェクトの作成
データ オブジェクトがターゲット アプリケーションによって —クライアントとサーバーが使用されます。ターゲット アプリケーションのデータ ソース オブジェクトは、アプリケーションとターゲット アプリケーション間の接続の 1 種類の末尾です。データ ソースのデータにアクセスし、対話にターゲット アプリケーションのデータ オブジェクトが使用されています。
データ オブジェクトが必要な 2 とおりの状況があります。最初の状況でデータがドラッグ アンド ドロップを使用してアプリケーションにドロップしたときです。2 番目の状況で、貼り付けや特別な貼り付けが編集] メニューから選択された場合です。
ドラッグ アンド ドロップの場合、データ オブジェクトを作成する必要はありません。既存のデータ オブジェクトへのポインターが OnDrop の関数に渡されます。このデータ オブジェクトは、ドラッグ アンド ドロップ操作の一部として、フレームワークにより作成され、それによって破棄されます。これは、貼り付けることが他のメソッドによってすると、常にではありません。詳細については、 データ オブジェクトの破棄を参照してください。
アプリケーションが貼り付けまたは貼り付けなどの特殊操作を実行すると、 COleDataObject のオブジェクトを作成し、 AttachClipboard のメンバー関数をダイヤルする必要があります。これは、クリップボードのデータとデータ オブジェクトを関連付けます。貼り付け関数で、このデータ オブジェクトを使用できます。
例にはこれがどのようにするか、 MFC OLE サンプル OCLIENTの一部である MAINVIEW.CPP ファイルの DoPasteItem 関数を参照してください。OCLIENT は、すべての貼り付け操作を実行し、 OnPasteLink の OnDrop、 OnPasteおよび関数からの DoPasteItem をダイヤルする関数を実行します。OnDrop に、渡されるデータ オブジェクトにポインターがあるため DoPasteItemへのポインターを渡します。このパラメーターのOnPaste 、クリップボードにデータ オブジェクトを作成し、接続するように DoPasteItem を示す OnPasteLink のパス NULL 。このメソッドは、貼り付けコードを分離するため、 1 か所にできます。また、デバッグは、両方の種類の貼り付け操作で使用できます。
データ オブジェクトの破棄
データ オブジェクトの作成で説明されている方法に従ってデータ オブジェクトを破棄するには、データ転送の重要な側面です。貼り付け関数で作成されたデータ オブジェクトは、 MFC によってと貼り付けの関数の戻り値破棄されます。
貼り付け操作を処理する別のメソッドに従った場合、貼り付け操作が完了したらデータ オブジェクトが破棄されることを確認します。データ オブジェクトが破棄されるまで、アプリケーションが正常にクリップボードにデータをコピーできない。
データ ソースの作成
データ ソースは、データ転送のクライアントまたはサーバー側になることができるデータ転送のソースによって使用されます。ソース アプリケーションのデータ ソースは、アプリケーション ソースとターゲット アプリケーション間の接続の 1 種類の末尾です。データ ソースのデータと対話するために対象アプリケーションのデータ オブジェクトが使用されています。
データ ソースは、アプリケーションがデータをクリップボードにコピーする必要があるときに作成されます。一般的なシナリオは次のように動作します:
ユーザーは、データを選択します。
ユーザーは 編集 のメニューから コピー(&&C),コピー (または 切り取り)を選択して、ドラッグ アンド ドロップ操作を開始します。
プログラムの設計により、アプリケーションは COleDataSourceから派生したクラスの COleDataSource オブジェクトまたはオブジェクトを作成します。
選択したデータはデータ ソースに COleDataSource::CacheData または COleDataSource::DelayRenderData のグループの関数の 1 種類を呼び出すことによって挿入されます。
アプリケーションは、ドラッグ アンド ドロップ操作の場合は、手順 3. で作成されたオブジェクトに属する SetClipboard のメンバー関数 (または DoDragDrop のメンバー関数)をダイヤルします。
これが 切り取り 操作または DoDragDrop の戻り DROPEFFECT_MOVE場合は、手順 1 で選択したデータはドキュメントから削除されます。
このシナリオでは、 MFC OLE のサンプル OCLIENT と HIERSVRによって実装されます。各アプリケーションの CViewをソース - すべて GetClipboardData と OnGetClipboardData の関数の派生クラスを参照してください。この二つの関数は COleClientItem か COleServerItem派生クラスの実装にあります。これらのサンプル プログラムは、の良い例は、これらの概念を実行できます。
、 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++ のオブジェクトと同様に、破棄があります。
詳細については、 ドラッグ アンド ドロップ、 クリップボードと データ オブジェクトの操作とデータ ソースを参照してください。