次の方法で共有


OLE ドラッグ アンド ドロップ

OLE のドラッグ アンド ドロップ機能は、主にデータのコピーと貼り付けのショートカットです。 クリップボードを使用してデータをコピーまたは貼り付ける場合は、いくつかの手順が必要です。 データを選択し、[編集] メニューから [切り取り] または [コピー] を選択します。 次に、移動先のアプリまたはウィンドウに移動し、ターゲットの場所にカーソルを置きます。 最後に、メニューから [編集>パス] を選択します。

OLE ドラッグ アンド ドロップ機能は、ファイル マネージャーのドラッグ アンド ドロップ メカニズムとは異なります。 ファイル マネージャーはファイル名のみを処理でき、ファイル名をアプリケーションに渡すために特別に設計されています。 OLE でのドラッグ アンド ドロップの方がはるかに一般的です。 クリップボードに配置できるデータをドラッグ アンド ドロップできます。

OLE ドラッグ アンド ドロップを使用する場合は、プロセスから 2 つのステップを削除します。 ソース ウィンドウ ("ドロップ ソース") からデータを選択し、コピー先 ("ドロップ ターゲット" ) にドラッグします。 マウス ボタンを離してドロップします。 この操作により、メニューが不要になり、コピー/貼り付けシーケンスよりも高速になります。 必要な要件は 1 つだけです。ドロップ ソースとドロップ ターゲットの両方を開き、少なくとも部分的に画面に表示する必要があります。

OLE ドラッグ アンド ドロップを使用すると、ある場所から別の場所 (ドキュメント内、異なるドキュメント間、またはアプリケーション間) にデータを簡単に転送できます。 コンテナーまたはサーバー アプリケーションのいずれかに実装できます。 アプリケーションには、ドロップ ソース、ドロップ ターゲット、またはその両方を指定できます。 アプリケーションでドロップ ソースとドロップ ターゲットの両方のサポートが実装されている場合は、子ウィンドウ間または 1 つのウィンドウ内でドラッグ アンド ドロップできます。 この機能により、アプリケーションの使い方がはるかに簡単になります。

データ オブジェクトとデータ ソース (OLE) の記事では、アプリケーションでデータ転送を実装する方法について説明します。 MFC OLE サンプル OCLIENTHIERSVR を調べることも役立ちます。

ドロップ ソースを実装する

アプリケーションでドラッグ アンド ドロップ操作にデータを提供するには、ドロップ ソースを実装します。 ドロップ ソースの基本的な実装は比較的簡単です。 最初の手順では、ドラッグ操作を開始するイベントを決定します。 推奨されるユーザー インターフェイス ガイドラインでは、選択したデータ内のポイントで WM_LBUTTONDOWN イベントが発生したときと同様に、ドラッグ操作の開始を定義します。 MFC OLE サンプル OCLIENTHIERSVR は 、次のガイドラインに従います。

アプリケーションがコンテナーであり、選択したデータが COleClientItem型のリンクオブジェクトまたは埋め込みオブジェクトである場合は、その DoDragDrop メンバー関数を呼び出します。 それ以外の場合は、 COleDataSource オブジェクトを構築し、選択範囲で初期化し、データ ソース オブジェクトの DoDragDrop メンバー関数を呼び出します。 アプリケーションがサーバーの場合は、 COleServerItem::DoDragDropを使用します。 標準的なドラッグ アンド ドロップ動作のカスタマイズについては、「 ドラッグ アンド ドロップのカスタマイズ」セクションを参照してください。

DoDragDrop がDROPEFFECT_MOVEを返す場合は、ソース ドキュメントからソース データを直ちに削除します。 DoDragDropからの他の戻り値は、ドロップ ソースに影響しません。

詳細については、「OLE データ オブジェクトとデータ ソース: 作成と破棄、OLE データ オブジェクトとデータ ソース: 操作」を参照してください。

ドロップ ターゲットを実装する

ドロップ ソースよりもドロップ ターゲットを実装するには少し多くの作業が必要ですが、比較的簡単です。

OLE ドロップ ターゲットを実装するには

  1. まだ存在しない場合は、アプリケーションの InitInstance メンバー関数でAfxOleInitの呼び出しを追加します。 OLE ライブラリを初期化するには、この呼び出しが必要です。

  2. ドロップ ターゲットにするアプリケーションの各ビューにメンバー変数を追加します。 このメンバー変数は、 COleDropTarget 型か、そこから派生したクラスである必要があります。

  3. WM_CREATE メッセージ (通常はOnCreate) を処理するビュー クラスの関数から、新しいメンバー変数の Register メンバー関数を呼び出します。 Revoke ビューが破棄されると、自動的に呼び出されます。

  4. 次の関数をオーバーライドします。 アプリケーション全体で同じ動作が必要な場合は、ビュー クラスでこれらの関数をオーバーライドします。 分離されたケースで動作を変更する場合や、CView 以外のウィンドウでのドロップを有効にする場合は、 COleDropTarget派生クラスでこれらの関数をオーバーライドします。

    オーバーライド 許可するには
    OnDragEnter ウィンドウで発生する操作を削除します。 カーソルが最初にウィンドウに入ったときに呼び出されます。
    OnDragLeave ドラッグ操作が指定したウィンドウから離れるときの特別な動作。
    OnDragOver ウィンドウで発生する操作を削除します。 カーソルがウィンドウ全体にドラッグされているときに呼び出されます。
    OnDrop 指定されたウィンドウにドロップされるデータの処理。
    OnScrollBy ターゲット ウィンドウでスクロールが必要な場合の特別な動作。

MAINVIEW を参照してください。これらの関数が連携する方法の例については、MFC OLE サンプル OCLIENT の一部である CPP ファイル。

詳細については、「OLE データ オブジェクトとデータ ソース: 作成と破棄、OLE データ オブジェクトとデータ ソース: 操作」を参照してください。

ドラッグ アンド ドロップをカスタマイズする

ドラッグ アンド ドロップ機能の既定の実装は、ほとんどのアプリケーションで十分です。 ただし、一部のアプリケーションでは、この標準動作を変更する必要があります。 このセクションでは、これらの既定値を変更するために必要な手順について説明します。 この手法を使用すると、複合ドキュメントをサポートしていないアプリケーションをドロップ ソースにできます。

標準の OLE ドラッグ アンド ドロップ動作をカスタマイズする場合、または OLE 以外のアプリケーションがある場合は、データを格納する COleDataSource オブジェクトを作成する必要があります。 ユーザーがドラッグ アンド ドロップ操作を開始すると、ドラッグ アンド ドロップ操作をサポートする他のクラスからではなく、このオブジェクトから DoDragDrop 関数を呼び出す必要があります。

必要に応じて、 COleDropSource オブジェクトを作成してドロップを制御し、変更する動作の種類に応じて一部の関数をオーバーライドできます。 このドロップ ソース オブジェクトは、これらの関数の既定の動作を変更するために COleDataSource::DoDragDrop に渡されます。 これらの異なるオプションにより、アプリケーションでのドラッグ アンド ドロップ操作をサポートする方法の柔軟性が大幅に向上します。 データ ソースの詳細については、「 データ オブジェクトとデータ ソース (OLE)」を参照してください。

ドラッグ アンド ドロップ操作をカスタマイズするには、次の関数をオーバーライドできます。

オーバーライド カスタマイズするには
OnBeginDrag DoDragDropを呼び出した後のドラッグ操作の開始方法。
GiveFeedback さまざまなドロップ結果に対する、カーソルの外観などの視覚的なフィードバック。
QueryContinueDrag ドラッグ アンド ドロップ操作の終了。 この関数を使用すると、ドラッグ操作中に修飾子キーの状態を確認できます。

こちらも参照ください

OLE
OLE データ オブジェクトとデータ ソース
OLE データ オブジェクトとデータ ソース: 作成と破棄
OLE データ オブジェクトとデータ ソース: 操作
COleClientItem::D oDragDrop
COleDataSource クラス
COleDataSource::D oDragDrop
COleDropSource クラス
COleDropTarget クラス
CView::OnDragLeave