Win32 API 日本語リファレンス
ホームUI.Shell › IDropTargetHelper

IDropTargetHelper

COM
IID4657278b-411b-11d2-839a-00c04fd918d0継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

ドロップターゲットが、ドラッグイメージがターゲットウィンドウ上にある間、そのドラッグイメージを表示できるようにするメソッドを公開します。

解説(Remarks)

このインターフェイスは Shell のドラッグイメージマネージャーによって公開されます。アプリケーションが実装するものではありません。

このインターフェイスは、ドラッグイメージがターゲットウィンドウ上にある間、ドラッグイメージマネージャーがドラッグイメージを表示できるようにするために、ドロップターゲットによって使用されます。IDragSourceHelper インターフェイスと IDropTargetHelper インターフェイスは、IDropTarget インターフェイスがカスタムのドラッグイメージを使用できるように、ドラッグイメージマネージャーオブジェクトによって公開されます。これらのインターフェイスのいずれかを使用するには、CLSID_DragDropHelper のクラス識別子 (CLSID) を指定して CoCreateInstance を呼び出し、インプロセスサーバーのドラッグイメージマネージャーオブジェクトを作成する必要があります。インターフェイスポインターは、標準の Component Object Model (COM) の手順を使用して取得します。

IDropTargetHelper の 4 つのメソッドは、IDropTarget の 4 つのメソッドに対応します。IDropTarget を実装する際は、その各メソッドから対応する IDropTargetHelper メソッドを呼び出して、情報をドラッグイメージマネージャーに渡す必要があります。5 番目の IDropTargetHelper メソッドは、ドラッグイメージの表示または非表示をドラッグイメージマネージャーに通知します。このメソッドは、低色深度のビデオモードでターゲットウィンドウ上をドラッグしているときに使用されます。これにより、ターゲットはウィンドウの描画中にドラッグイメージを非表示にできます。

Note ドラッグアンドドロップヘルパーオブジェクトは、IDataObject::SetData を呼び出して、プロセス間サポートに使用されるプライベート形式をデータオブジェクトに読み込みます。その後、IDataObject::GetData を呼び出してこれらの形式を取得します。ドラッグアンドドロップヘルパーオブジェクトをサポートするには、データオブジェクトの SetData および GetData の実装が、任意のプライベート形式を受け入れて返せる必要があります。
Shell のドラッグアンドドロップ操作の詳細については、Transferring Shell Data Using Drag-and-Drop or the Clipboard を参照してください。
Note Windows Vista 以前では、このインターフェイスは Shlobj.h で宣言されていました。

メソッド 5

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT DragEnter(HWND hwndTarget, IDataObject* pDataObject, POINT* ppt, DROPEFFECT dwEffect)

ドロップターゲットの IDropTarget::DragEnter メソッドが呼び出されたことをドラッグイメージマネージャーに通知します。

hwndTargetHWNDinターゲットのウィンドウハンドル。
pDataObjectIDataObject*inデータオブジェクトの IDataObject インターフェイスへのポインター。
pptPOINT*inIDropTarget::DragEnter メソッドの pt パラメーターで受け取った POINT 構造体へのポインター。
dwEffectDROPEFFECTinIDropTarget::DragEnter メソッドの pdwEffect パラメーターが指す値。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合は COM エラー値を返します。

解説(Remarks)

このメソッドは、ドロップターゲットの IDropTarget::DragEnter メソッドが呼び出されたときに、ドロップターゲットによって呼び出されます。ドロップターゲットに入ったことをドラッグイメージマネージャーに通知し、ドラッグイメージの表示に必要な情報を提供します。

vtbl 4 HRESULT DragLeave()

ドロップターゲットの IDropTarget::DragLeave メソッドが呼び出されたことをドラッグイメージマネージャーに通知します。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合は COM エラー値を返します。

解説(Remarks)

このメソッドは、ドロップターゲットの IDropTarget::DragLeave メソッドが呼び出されたときに、ドロップターゲットによって呼び出されます。カーソルがドロップターゲットから離れたことをドラッグイメージマネージャーに通知します。

vtbl 5 HRESULT DragOver(POINT* ppt, DROPEFFECT dwEffect)

ドロップターゲットの IDropTarget::DragOver メソッドが呼び出されたことをドラッグイメージマネージャーに通知します。

pptPOINT*inIDropTarget::DragOver メソッドの pt パラメーターで受け取った POINT 構造体へのポインター。
dwEffectDROPEFFECTinIDropTarget::DragOver メソッドの pdwEffect パラメーターが指す値。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合は COM エラー値を返します。

解説(Remarks)

このメソッドは、ドロップターゲットの IDropTarget::DragOver メソッドが呼び出されたときに、ドロップターゲットによって呼び出されます。カーソル位置が変更されたことをドラッグイメージマネージャーに通知し、ドラッグイメージの表示に必要な情報を提供します。

vtbl 6 HRESULT Drop(IDataObject* pDataObject, POINT* ppt, DROPEFFECT dwEffect)

ドロップターゲットの IDropTarget::Drop メソッドが呼び出されたことをドラッグイメージマネージャーに通知します。

pDataObjectIDataObject*inデータオブジェクトの IDataObject インターフェイスへのポインター。
pptPOINT*inIDropTarget::Drop メソッドの pt パラメーターで受け取った POINT 構造体へのポインター。
dwEffectDROPEFFECTinIDropTarget::Drop メソッドの pdwEffect パラメーターが指す値。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合は COM エラー値を返します。

解説(Remarks)

このメソッドは、ドロップターゲットの IDropTarget::Drop メソッドが呼び出されたときに、ドロップターゲットによって呼び出されます。オブジェクトがドロップされたことをドラッグイメージマネージャーに通知し、ドラッグイメージの表示に必要な情報を提供します。

vtbl 7 HRESULT Show(BOOL fShow)

ドラッグイメージの表示または非表示をドラッグイメージマネージャーに通知します。

fShowBOOLinドラッグイメージを表示する場合は TRUE、非表示にする場合は FALSE に設定するブール値。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合は COM エラー値を返します。

解説(Remarks)

このメソッドは、低色深度のビデオモードでターゲットウィンドウ上をドラッグしているときに使用されます。これにより、ターゲットはウィンドウの描画中にドラッグイメージを非表示にするようドラッグイメージマネージャーに通知できます。現在ドラッグ中のウィンドウを描画している間は、fShowFALSE に設定して Show を呼び出し、ドラッグイメージを非表示にします。ウィンドウの描画が完了したら、fShowTRUE に設定して Show を呼び出し、ドラッグイメージを再度表示します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IDropTargetHelper "{4657278B-411B-11D2-839A-00C04FD918D0}"
#usecom global IDropTargetHelper IID_IDropTargetHelper "{}"
#comfunc global IDropTargetHelper_DragEnter  3 sptr,sptr,var,int
#comfunc global IDropTargetHelper_DragLeave  4
#comfunc global IDropTargetHelper_DragOver   5 var,int
#comfunc global IDropTargetHelper_Drop       6 sptr,var,int
#comfunc global IDropTargetHelper_Show       7 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。