IVisualTreeService
COM公式ドキュメント
XAML のビジュアルツリーを管理するためのメソッドを提供します。
メソッド 12
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ビジュアルツリーへの変更のリッスンを開始します。
| pCallback | IVisualTreeServiceCallback* | in | 変更イベントに登録するコールバック。 |
戻り値
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
AdviseVisualTreeChange は、呼び出し元が変更イベント(ビジュアルツリーへの変更)のリッスンを開始したいときに呼び出します。コールバックは、ビジュアルツリーが構築されるとイベントの受信を開始します。すでに構築済みの場合、呼び出し元はただちに変更イベントを受信します。
ビジュアルツリーへの変更のリッスンを停止します。
| pCallback | IVisualTreeServiceCallback* | in | 変更イベントの登録を解除するコールバック。 |
戻り値
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
UnadviseVisualTreeChange は、呼び出し元が変更イベントのリッスンを不要になったときに呼び出します。
XAML ランタイムで定義されているすべての列挙型の配列と、その総数を取得します。
| pCount | DWORD* | out | 配列内の列挙型の数。 |
| ppEnums | EnumType** | out | XAML ランタイムで定義されている列挙型の配列。 |
戻り値
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。このメソッドは通常の条件下では失敗しないはずです。
任意の XAML ランタイム型、列挙型、またはプリミティブ型のインスタンスを作成します。
| typeName | LPWSTR | in | 型名。(PropertyChainValue.Type から取得したものである必要があります。) |
| value | LPWSTR | in | プリミティブ型または列挙型に設定する値。XAML ランタイム型を作成する場合は null を指定します。 |
| pInstanceHandle | ULONGLONG* | out | 新しく作成されたインスタンスへのインスタンスハンドル。 |
戻り値
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
プリミティブ型および列挙型の場合、value には目的の値を設定します。XAML ランタイム型の場合、value は null にします。
渡された要素に設定されているすべてのプロパティの配列と、それらのプロパティの有効値の設定に関与するすべてのスタイルの配列を取得します。
| instanceHandle | ULONGLONG | in | プロパティを照会する対象の要素へのハンドル。 |
| pSourceCount | DWORD* | out | プロパティソース配列の数。 |
| ppPropertySources | PropertyChainSource** | out | プロパティソースの配列。 |
| pPropertyCount | DWORD* | out | プロパティ値配列の数。 |
| ppPropertyValues | PropertyChainValue** | out | プロパティ値の配列。 |
戻り値
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。このメソッドは通常の条件下では失敗しないはずです。
解説(Remarks)
GetPropertyValuesChain は、渡された要素に設定されているすべてのプロパティを表す PropertyChainValue 構造体の配列を返します。また、各プロパティの有効値の設定に関与するすべてのスタイルを表す PropertyChainSource 構造体の配列も返します。
XAML 要素にプロパティ値を設定します。
| instanceHandle | ULONGLONG | in | プロパティを設定する対象の要素へのハンドル。 |
| value | ULONGLONG | in | 要素のプロパティに設定する値へのハンドル。 |
| propertyIndex | DWORD | in | 設定するプロパティの(XAML ランタイムキャッシュ内での)インデックス。 |
戻り値
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
SetProperty の呼び出し元は、まず GetPropertyValuesChain を呼び出して設定したいプロパティを見つけ、そのインデックスを取得することで、設定するプロパティのインデックスを把握しておく必要があります。また、CreateInstance を呼び出すか、SolidColorBrush のような共有プロパティの以前のインスタンスをキャッシュしておくことで、値への InstanceHandle も用意しておく必要があります。
XAML 要素の指定したプロパティをクリアします。
| instanceHandle | ULONGLONG | in | プロパティを設定する対象の要素へのハンドル。 |
| propertyIndex | DWORD | in | クリアするプロパティの(XAML ランタイムキャッシュ内での)インデックス。 |
戻り値
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
コレクションの要素数を取得します。
| instanceHandle | ULONGLONG | in | コレクションオブジェクトへのハンドル。 |
| pCollectionSize | DWORD* | out | コレクション内の要素数。 |
戻り値
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
いずれのコレクションメソッドでも、呼び出し元は既知の要素のプロパティを照会し、そのプロパティに MetadataBit::IsValueCollection が設定されている場合にのみ、このメソッドを呼び出す必要があります。
コレクション内の要素を取得します。
| instanceHandle | ULONGLONG | in | コレクションオブジェクトへのハンドル。 |
| startIndex | DWORD | in | 要素の取得を開始するコレクション内のインデックス。 |
| pElementCount | DWORD* | inout | 返される配列内の要素数。 |
| ppElementValues | CollectionElementValue** | out | コレクションから返される要素の配列。 |
戻り値
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
いずれのコレクションメソッドでも、呼び出し元は既知の要素のプロパティを照会し、そのプロパティに MetadataBit::IsValueCollection が設定されている場合にのみ、このメソッドを呼び出す必要があります。
指定したインデックスの位置に子要素をコレクションへ追加します。
| parent | ULONGLONG | in | コレクションオブジェクトへのハンドル。 |
| child | ULONGLONG | in | コレクションに配置する要素へのハンドル。これは CreateInstance を通じて新しく作成したものでも、SolidColorBrush のような共有されたものでもかまいません。 |
| index | DWORD | in | child 要素を挿入する parent コレクション内の位置。 |
戻り値
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
いずれのコレクションメソッドでも、呼び出し元は既知の要素のプロパティを照会し、そのプロパティに MetadataBit::IsValueCollection が設定されている場合にのみ、このメソッドを呼び出す必要があります。
指定したインデックスから子要素を削除します。
| parent | ULONGLONG | in | コレクションオブジェクトへのハンドル。 |
| index | DWORD | in | 子要素を削除する parent コレクション内の位置。 |
戻り値
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。index がコレクションの範囲外の場合、このメソッドは失敗します。
解説(Remarks)
いずれのコレクションメソッドでも、呼び出し元は既知の要素のプロパティを照会し、そのプロパティに MetadataBit::IsValueCollection が設定されている場合にのみ、このメソッドを呼び出す必要があります。
親コレクションからすべての子要素をクリアします。
| parent | ULONGLONG | in | コレクションオブジェクトへのハンドル。 |
戻り値
このメソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。
解説(Remarks)
いずれのコレクションメソッドでも、呼び出し元は既知の要素のプロパティを照会し、そのプロパティに MetadataBit::IsValueCollection が設定されている場合にのみ、このメソッドを呼び出す必要があります。
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 指定が可能。#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 sptr,sptr #comfunc global IVisualTreeService_CreateInstance 6 wstr,wstr,sptr #comfunc global IVisualTreeService_GetPropertyValuesChain 7 int64,sptr,sptr,sptr,sptr #comfunc global IVisualTreeService_SetProperty 8 int64,int64,int #comfunc global IVisualTreeService_ClearProperty 9 int64,int #comfunc global IVisualTreeService_GetCollectionCount 10 int64,sptr #comfunc global IVisualTreeService_GetCollectionElements 11 int64,int,sptr,sptr #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が無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。