IDragProvider
COM公式ドキュメント
Microsoft UI Automation 要素が、ドラッグアンドドロップ操作の一部としてドラッグ可能な要素であることを自身で表現できるようにします。
解説(Remarks)
プロバイダーは、ドラッグされる要素自体にのみ IDragProvider を実装することもできますし、個々の要素への IDragProvider 実装に加えて、IDragProvider を実装する中間的なドラッグオブジェクトを使用することもできます。この中間オブジェクトはすべてのイベントを発生させる役割を担い、これによりプロバイダーは複数の要素を一度にドラッグする操作をサポートし、その複数要素のドラッグ操作を単一のドラッグプロパティおよびイベントのセットで表現できるようになります。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
要素がドラッグアンドドロップ操作の一部としてグラブ(掴まれた状態)されているかどうかを示します。
| pRetVal | BOOL* | out | 要素がドラッグ操作のためにつかまれている(グラブ状態)かどうかを受け取る BOOL へのポインタである。 |
解説(Remarks)
このプロパティが変化した場合、プロバイダーは UiaRaiseAutomationPropertyChangedEvent を呼び出し、プロパティ識別子として UIA_DragIsGrabbedPropertyId または UIA_DragDropEffectPropertyId を指定して、クライアントに通知する必要があります。
この要素をドラッグアンドドロップ操作の一部としてドロップしたときに何が起こるかを示す、ローカライズされた文字列を取得します。
| pRetVal | LPWSTR* | out | ドラッグ中の要素がドロップされた際に行われる効果のローカライズ文字列を受け取る LPWSTR へのポインタである。 |
解説(Remarks)
UI Automation のドラッグアンドドロップにおけるソース専用スタイルでは、DropTarget パターンを実装する要素は存在しません。ドラッグ中の要素をドロップした際にどのような効果が生じるかを知るために、クライアントはドラッグされている要素の DropEffect プロパティを照会できます。このプロパティは "move" のような短い文字列の場合もあれば、"insert into Main group" のような長い文字列の場合もあります。この文字列は常にローカライズされています。
このプロパティが変化した場合、プロバイダーは UiaRaiseAutomationPropertyChangedEvent を呼び出し、プロパティ識別子として UIA_DragIsGrabbedPropertyId または UIA_DragDropEffectPropertyId を指定して、クライアントに通知する必要があります。
この要素をドラッグアンドドロップ操作の一部としてドロップしたときに発生し得る効果の全セットを列挙した、ローカライズされた文字列の配列を取得します。
| pRetVal | SAFEARRAY** | out | ドラッグ操作で可能なすべてのドロップ効果を表す文字列の配列を受け取る SAFEARRAY へのポインタである。 |
解説(Remarks)
一部のドラッグ操作は、複数の異なるドロップ効果のセットをサポートします。たとえば、右クリックによって開始されたドラッグ操作では、要素をドロップした際にオプションのメニューが表示される場合があります。Microsoft UI Automation のドラッグアンドドロップにおけるソース専用スタイルでは、DropTarget パターンを実装する要素は存在しません。ドラッグ中の要素をドロップした際にどのような効果が生じるかを知るために、クライアントはドラッグされている要素の DropEffect プロパティを照会できます。このプロパティは "move" のような短い文字列の場合もあれば、"insert into Main group" のような長い文字列の場合もあります。これらの文字列は常にローカライズされています。
ドラッグ操作の一部としてドラッグされている要素のコレクションを取得します。
| pRetVal | SAFEARRAY** | out | ドラッグされている要素の IRawElementProviderSimple インターフェイスを指す VT_UNKNOWN ポインターの配列です。 単一の項目のみがドラッグされている場合、このパラメーターは NULL になります。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
ユーザーが複数の項目をドラッグしている場合、それらの項目は、関連付けられたグラブ済み要素のセットを伴う単一のマスター要素によって表現されます。大量の重複イベントが発生するのを避けるため、マスター要素が適切なイベントを発生させます。クライアントは GetGrabbedItems を呼び出すことで、グラブされた項目の完全な一覧を取得できます。プロバイダーは適切な長さの SAFEARRAY を割り当て、ドラッグ操作の一部となっている要素のコンポーネントオブジェクトモデル (COM) ポインターを追加する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDragProvider "{6AA7BBBB-7FF9-497D-904F-D20B897929D8}" #usecom global IDragProvider IID_IDragProvider "{}" #comfunc global IDragProvider_get_IsGrabbed 3 var #comfunc global IDragProvider_get_DropEffect 4 var #comfunc global IDragProvider_get_DropEffects 5 var #comfunc global IDragProvider_GetGrabbedItems 6 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IDragProvider "{6AA7BBBB-7FF9-497D-904F-D20B897929D8}" #usecom global IDragProvider IID_IDragProvider "{}" #comfunc global IDragProvider_get_IsGrabbed 3 sptr #comfunc global IDragProvider_get_DropEffect 4 sptr #comfunc global IDragProvider_get_DropEffects 5 sptr #comfunc global IDragProvider_GetGrabbedItems 6 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。