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

IDragSourceHelper

COM
IIDde5bf786-477a-11d2-839d-00c04fd918d0継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

Shell によって公開され、Shell のドラッグアンドドロップ操作中に表示される画像をアプリケーションが指定できるようにします。

解説(Remarks)

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

Shell のドラッグアンドドロップ操作中に表示される画像を指定するには、このインターフェイスを使用します。IDragSourceHelperIDropTargetHelperIInitializeWithWindow の各インターフェイスは、IDropTarget インターフェイスがカスタムのドラッグイメージを使用できるよう、ドラッグイメージマネージャーオブジェクトによって公開されます。これらのインターフェイスを使用するには、クラス識別子 (CLSID) に CLSID_DragDropHelper を指定して CoCreateInstance を呼び出し、インプロセスサーバーのドラッグイメージマネージャーオブジェクトを作成する必要があります。インターフェイスポインターは標準的な Component Object Model (COM) の手順を用いて取得します。

IDragSourceHelper インターフェイスは、ドラッグイメージとして使用するビットマップを指定する方法を次の 2 通り提供します。

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

メソッド 2

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

vtbl 3 HRESULT InitializeFromBitmap(SHDRAGIMAGE* pshdi, IDataObject* pDataObject)

ウィンドウを持たないコントロール用にドラッグイメージマネージャーを初期化します。

pshdiSHDRAGIMAGE*inビットマップに関する情報を格納する SHDRAGIMAGE 構造体です。
pDataObjectIDataObject*inデータオブジェクトの IDataObject インターフェイスへのポインターです。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

InitializeFromBitmap はアルファ値の計算時に常に RGB 乗算処理を行うため、アルファブレンディングを事前乗算していないビットマップを常に渡してください。事前乗算済みのアルファブレンディングを持つビットマップを渡してもエラーにはなりませんが、このメソッドは再度乗算を行うため、結果のアルファ値が二重になります。

vtbl 4 HRESULT InitializeFromWindow(HWND hwnd, POINT* ppt, IDataObject* pDataObject)

ウィンドウを持つコントロール用にドラッグイメージマネージャーを初期化します。

hwndHWNDinoptionalDI_GETDRAGIMAGE メッセージを受け取るウィンドウのハンドルです。この値は NULL にすることができます。
pptPOINT*inoptionalドラッグイメージ内でのカーソルの位置を指定する POINT 構造体へのポインターです。この構造体には、ドラッグイメージの左上隅からカーソル位置までのオフセットを格納します。この値は NULL にすることができます。
pDataObjectIDataObject*inデータオブジェクトの IDataObject インターフェイスへのポインターです。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

DI_GETDRAGIMAGE メッセージを使用すると、カスタムコントロールからドラッグイメージを取得できます。このメッセージは Shlobj.h で定義されており、RegisterWindowMessage で登録する必要があります。hwnd で指定したウィンドウが DI_GETDRAGIMAGE メッセージを受け取ると、lParam 値には SHDRAGIMAGE 構造体へのポインターが格納されます。ハンドラーはこの構造体にドラッグイメージのビットマップ情報を格納する必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IDragSourceHelper "{DE5BF786-477A-11D2-839D-00C04FD918D0}"
#usecom global IDragSourceHelper IID_IDragSourceHelper "{}"
#comfunc global IDragSourceHelper_InitializeFromBitmap  3 var,sptr
#comfunc global IDragSourceHelper_InitializeFromWindow  4 sptr,var,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。