IOleInPlaceObjectWindowless::GetDropTarget メソッド (ocidl.h)

ドラッグ アンド ドロップをサポートするインプレース アクティブなウィンドウレス オブジェクトの IDropTarget インターフェイスを取得します。

構文

HRESULT GetDropTarget(
  [out] IDropTarget **ppDropTarget
);

パラメーター

[out] ppDropTarget

ウィンドウレス オブジェクトへのインターフェイス ポインターを受け取る IDropTarget ポインター変数へのポインター。

戻り値

このメソッドは、成功したS_OKを返します。 その他の可能な戻り値は次のとおりです。

リターン コード 説明
E_NOTIMPL
ウィンドウレス オブジェクトでは、ドラッグ アンド ドロップはサポートされていません。

注釈

ウィンドウ オブジェクトは、RegisterDragDrop 関数を呼び出し、そのウィンドウ ハンドルをパラメーターとして指定することで、IDropTarget インターフェイスを登録します。 IDropTarget インターフェイスを登録すると、オブジェクトをドラッグ アンド ドロップ操作に参加できます。 アクティブなときはウィンドウがないため、ウィンドウレス オブジェクトは IDropTarget インターフェイスを登録できません。 そのため、コンテナーからのサポートがないと、ドラッグ アンド ドロップ操作に直接参加することはできません。

ウィンドウレス オブジェクトを含むドラッグ アンド ドロップ操作中に、次のイベントが発生します。

  • コンテナーは、RegisterDragDrop 関数を使用して独自の IDropTarget インターフェイスを登録します。
  • コンテナーの独自の IDropTarget::D ragEnter メソッドまたは IDropTarget::D ragOver メソッドの実装では、マウス ポインターが埋め込みオブジェクトに入ったかどうかを検出します。
  • オブジェクトが非アクティブな場合、コンテナーはオブジェクトの IPointerInactive::GetActivationPolicy メソッドを 呼び出します。 オブジェクトは、POINTERINACTIVE_ACTIVATEONDRAG フラグを返します。 その後、コンテナーによってオブジェクトがインプレースでアクティブ化されます。 オブジェクトが既にアクティブな場合、コンテナーはこの手順を実行する必要はありません。
  • オブジェクトがアクティブな場合、コンテナーはオブジェクトの IDropTarget インターフェイスを取得する必要があります。
  • ドロップ ターゲットを希望するウィンドウレス オブジェクトは、 IDropTarget インターフェイスを実装しますが、登録せず、 IUnknown::QueryInterface の呼び出しを通じて返しません。 代わりに、コンテナーはオブジェクトの IOleInPlaceObjectWindowless::GetDropTarget メソッドを呼び出すことによって、このインターフェイスを取得できます。 ドラッグ アンド ドロップ操作に参加する場合、オブジェクトは独自の IDropTarget インターフェイスへのポインターを返します。 コンテナーは、後で使用するためにこのインターフェイス ポインターをキャッシュできます。 たとえば、コンテナーの IDropTarget::D ragEnter メソッドまたは IDropTarget::D ragLeave メソッドの後続の呼び出しでは、コンテナーはオブジェクトの GetDropTarget メソッドを再度呼び出す代わりにキャッシュされたポインターを使用できます。
  • 次に、コンテナーはオブジェクトの IDropTarget::D ragEnter を呼び出し、独自の IDropTarget::D ragOver メソッドまたは IDropTarget::DragEnter メソッドから pdwEffect の戻り値を渡します。 この時点から、マウスがオブジェクトから離れるか、オブジェクトにドロップが発生するまで、コンテナーは後続のすべての IDropTarget::D ragOver 呼び出しをウィンドウレス オブジェクトに転送します。 マウスがオブジェクトから離れると、コンテナーはオブジェクトの IDropTarget::D ragLeave を呼び出し、オブジェクトの IDropTarget インターフェイスを 解放します。 ドロップが発生した場合、コンテナーは IDropTarget::D rop 呼び出しを オブジェクトに転送します。
  • 最後に、コンテナーがインプレースでオブジェクトを非アクティブ化します。
オブジェクトは、独自の IDropTarget::D ragEnter からS_FALSE を返して、データ オブジェクト内のデータ形式を受け入れないことを示すことができます。 その場合、コンテナーはそれ自体のデータを受け入れ、独自の IDropTarget::D ragEnter メソッドまたは IDropTarget::DragOver メソッドから適切な dwEffect を返すことを決定できます。

IDropTarget::D ragEnter からS_FALSEを返すオブジェクトは、IDropTarget::D ragLeave の間に IDropTarget::D ragEnter の後続の呼び出しを受信するように準備する必要があります。 実際、コンテナーの IDropTarget::D ragOver の次回の呼び出し中にマウスがまだ同じオブジェクトの上にある場合、コンテナーはオブジェクトに対して IDropTarget::D ragEnter を再度呼び出そうとします。

呼び出し元へのメモ

コンテナーは、後で使用するために、オブジェクトの IDropTarget インターフェイスへのポインターをキャッシュできます。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー ocidl.h

こちらもご覧ください

IDropTarget

IOleInPlaceObjectWindowless

IPointerInactive::GetActivationPolicy

RegisterDragDrop