Win32 API 日本語リファレンス
ホームUI.Xaml.Diagnostics › IVisualTreeService

IVisualTreeService

COM
IIDa593b11a-d17f-48bb-8f66-83910731c8a5継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

XAML のビジュアルツリーを管理するためのメソッドを提供します。

メソッド 12

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

vtbl 3 HRESULT AdviseVisualTreeChange(IVisualTreeServiceCallback* pCallback)

ビジュアルツリーへの変更のリッスンを開始します。

pCallbackIVisualTreeServiceCallback*in変更イベントに登録するコールバック。

戻り値

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

解説(Remarks)

AdviseVisualTreeChange は、呼び出し元が変更イベント(ビジュアルツリーへの変更)のリッスンを開始したいときに呼び出します。コールバックは、ビジュアルツリーが構築されるとイベントの受信を開始します。すでに構築済みの場合、呼び出し元はただちに変更イベントを受信します。

vtbl 4 HRESULT UnadviseVisualTreeChange(IVisualTreeServiceCallback* pCallback)

ビジュアルツリーへの変更のリッスンを停止します。

pCallbackIVisualTreeServiceCallback*in変更イベントの登録を解除するコールバック。

戻り値

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

解説(Remarks)

UnadviseVisualTreeChange は、呼び出し元が変更イベントのリッスンを不要になったときに呼び出します。

vtbl 5 HRESULT GetEnums(DWORD* pCount, EnumType** ppEnums)

XAML ランタイムで定義されているすべての列挙型の配列と、その総数を取得します。

pCountDWORD*out配列内の列挙型の数。
ppEnumsEnumType**outXAML ランタイムで定義されている列挙型の配列。

戻り値

このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。このメソッドは通常の条件下では失敗しないはずです。

vtbl 6 HRESULT CreateInstance(LPWSTR typeName, LPWSTR value, ULONGLONG* pInstanceHandle)

任意の XAML ランタイム型、列挙型、またはプリミティブ型のインスタンスを作成します。

typeNameLPWSTRin型名。(PropertyChainValue.Type から取得したものである必要があります。)
valueLPWSTRinプリミティブ型または列挙型に設定する値。XAML ランタイム型を作成する場合は null を指定します。
pInstanceHandleULONGLONG*out新しく作成されたインスタンスへのインスタンスハンドル。

戻り値

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

解説(Remarks)

プリミティブ型および列挙型の場合、value には目的の値を設定します。XAML ランタイム型の場合、valuenull にします。

vtbl 7 HRESULT GetPropertyValuesChain(ULONGLONG instanceHandle, DWORD* pSourceCount, PropertyChainSource** ppPropertySources, DWORD* pPropertyCount, PropertyChainValue** ppPropertyValues)

渡された要素に設定されているすべてのプロパティの配列と、それらのプロパティの有効値の設定に関与するすべてのスタイルの配列を取得します。

instanceHandleULONGLONGinプロパティを照会する対象の要素へのハンドル。
pSourceCountDWORD*outプロパティソース配列の数。
ppPropertySourcesPropertyChainSource**outプロパティソースの配列。
pPropertyCountDWORD*outプロパティ値配列の数。
ppPropertyValuesPropertyChainValue**outプロパティ値の配列。

戻り値

このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。このメソッドは通常の条件下では失敗しないはずです。

解説(Remarks)

GetPropertyValuesChain は、渡された要素に設定されているすべてのプロパティを表す PropertyChainValue 構造体の配列を返します。また、各プロパティの有効値の設定に関与するすべてのスタイルを表す PropertyChainSource 構造体の配列も返します。

vtbl 8 HRESULT SetProperty(ULONGLONG instanceHandle, ULONGLONG value, DWORD propertyIndex)

XAML 要素にプロパティ値を設定します。

instanceHandleULONGLONGinプロパティを設定する対象の要素へのハンドル。
valueULONGLONGin要素のプロパティに設定する値へのハンドル。
propertyIndexDWORDin設定するプロパティの(XAML ランタイムキャッシュ内での)インデックス。

戻り値

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

解説(Remarks)

SetProperty の呼び出し元は、まず GetPropertyValuesChain を呼び出して設定したいプロパティを見つけ、そのインデックスを取得することで、設定するプロパティのインデックスを把握しておく必要があります。また、CreateInstance を呼び出すか、SolidColorBrush のような共有プロパティの以前のインスタンスをキャッシュしておくことで、値への InstanceHandle も用意しておく必要があります。

vtbl 9 HRESULT ClearProperty(ULONGLONG instanceHandle, DWORD propertyIndex)

XAML 要素の指定したプロパティをクリアします。

instanceHandleULONGLONGinプロパティを設定する対象の要素へのハンドル。
propertyIndexDWORDinクリアするプロパティの(XAML ランタイムキャッシュ内での)インデックス。

戻り値

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

vtbl 10 HRESULT GetCollectionCount(ULONGLONG instanceHandle, DWORD* pCollectionSize)

コレクションの要素数を取得します。

instanceHandleULONGLONGinコレクションオブジェクトへのハンドル。
pCollectionSizeDWORD*outコレクション内の要素数。

戻り値

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

解説(Remarks)

いずれのコレクションメソッドでも、呼び出し元は既知の要素のプロパティを照会し、そのプロパティに MetadataBit::IsValueCollection が設定されている場合にのみ、このメソッドを呼び出す必要があります。

vtbl 11 HRESULT GetCollectionElements(ULONGLONG instanceHandle, DWORD startIndex, DWORD* pElementCount, CollectionElementValue** ppElementValues)

コレクション内の要素を取得します。

instanceHandleULONGLONGinコレクションオブジェクトへのハンドル。
startIndexDWORDin要素の取得を開始するコレクション内のインデックス。
pElementCountDWORD*inout返される配列内の要素数。
ppElementValuesCollectionElementValue**outコレクションから返される要素の配列。

戻り値

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

解説(Remarks)

いずれのコレクションメソッドでも、呼び出し元は既知の要素のプロパティを照会し、そのプロパティに MetadataBit::IsValueCollection が設定されている場合にのみ、このメソッドを呼び出す必要があります。

vtbl 12 HRESULT AddChild(ULONGLONG parent, ULONGLONG child, DWORD index)

指定したインデックスの位置に子要素をコレクションへ追加します。

parentULONGLONGinコレクションオブジェクトへのハンドル。
childULONGLONGinコレクションに配置する要素へのハンドル。これは CreateInstance を通じて新しく作成したものでも、SolidColorBrush のような共有されたものでもかまいません。
indexDWORDinchild 要素を挿入する parent コレクション内の位置。

戻り値

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

解説(Remarks)

いずれのコレクションメソッドでも、呼び出し元は既知の要素のプロパティを照会し、そのプロパティに MetadataBit::IsValueCollection が設定されている場合にのみ、このメソッドを呼び出す必要があります。

vtbl 13 HRESULT RemoveChild(ULONGLONG parent, DWORD index)

指定したインデックスから子要素を削除します。

parentULONGLONGinコレクションオブジェクトへのハンドル。
indexDWORDin子要素を削除する parent コレクション内の位置。

戻り値

このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。index がコレクションの範囲外の場合、このメソッドは失敗します。

解説(Remarks)

いずれのコレクションメソッドでも、呼び出し元は既知の要素のプロパティを照会し、そのプロパティに MetadataBit::IsValueCollection が設定されている場合にのみ、このメソッドを呼び出す必要があります。

vtbl 14 HRESULT ClearChildren(ULONGLONG parent)

親コレクションからすべての子要素をクリアします。

parentULONGLONGinコレクションオブジェクトへのハンドル。

戻り値

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

解説(Remarks)

いずれのコレクションメソッドでも、呼び出し元は既知の要素のプロパティを照会し、そのプロパティに MetadataBit::IsValueCollection が設定されている場合にのみ、このメソッドを呼び出す必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IVisualTreeService "{A593B11A-D17F-48BB-8F66-83910731C8A5}"
#usecom global IVisualTreeService IID_IVisualTreeService "{}"
#comfunc global IVisualTreeService_AdviseVisualTreeChange    3 sptr
#comfunc global IVisualTreeService_UnadviseVisualTreeChange  4 sptr
#comfunc global IVisualTreeService_GetEnums                  5 var,var
#comfunc global IVisualTreeService_CreateInstance            6 wstr,wstr,var
#comfunc global IVisualTreeService_GetPropertyValuesChain    7 int64,var,var,var,var
#comfunc global IVisualTreeService_SetProperty               8 int64,int64,int
#comfunc global IVisualTreeService_ClearProperty             9 int64,int
#comfunc global IVisualTreeService_GetCollectionCount        10 int64,var
#comfunc global IVisualTreeService_GetCollectionElements     11 int64,int,var,var
#comfunc global IVisualTreeService_AddChild                  12 int64,int64,int
#comfunc global IVisualTreeService_RemoveChild               13 int64,int
#comfunc global IVisualTreeService_ClearChildren             14 int64
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。