IValueProvider
COM公式ドキュメント
範囲を持たず、文字列として表現できる固有の値を持つコントロールへのアクセスを提供します。
解説(Remarks)
コントロールの値は、コントロールおよびその設定に応じて編集可能な場合と編集できない場合があります。
Value コントロールパターンをサポートする必要がある Microsoft UI Automation プロバイダーに実装されます。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
コントロールの値を設定します。
| val | LPWSTR | in | 設定する値。プロバイダーは、値を適切なデータ型に変換する責任を負います。 |
戻り値
解説(Remarks)
単一行の編集コントロールは、IValueProvider を実装することで、その内容へのプログラムによるアクセスをサポートします。 ただし、複数行の編集コントロールは IValueProvider を実装しません。 代わりに、ITextProvider を実装することで、その内容へのアクセスを提供します。
ListItem や TreeItem などのコントロールは、いずれかの項目の値が編集可能である場合、コントロールの現在の編集モードにかかわらず IValueProvider を実装する必要があります。 子項目が編集可能である場合は、親コントロールも IValueProvider を実装する必要があります。
コントロールの値。
| pRetVal | LPWSTR* | out | 要素の現在の値を文字列で受け取る LPWSTR へのポインタである。呼び出し側は SysFreeString で解放する。 |
解説(Remarks)
単一行の編集コントロールは、(ITextProvider に加えて) IValueProvider を実装することで、その内容へのプログラムによるアクセスをサポートします。ただし、複数行の編集コントロールは IValueProvider を実装しません。
複数行の編集コントロールのテキスト内容を取得するには、コントロールが ITextProvider を実装する必要があります。ただし、ITextProvider はコントロールの値の設定をサポートしません。
IValueProvider は、書式情報や部分文字列値の取得をサポートしません。これらのシナリオでは ITextProvider を実装してください。
コントロールの値が読み取り専用かどうかを示します。(IValueProvider.get_IsReadOnly)
| pRetVal | BOOL* | out | 要素が読み取り専用で値を変更できないかどうかを受け取る BOOL へのポインタである。 |
解説(Remarks)
IValueProvider::SetValue の呼び出しを許可する前に、コントロールは IsEnabled プロパティ (UIA_IsEnabledPropertyId) を TRUE に設定し、IValueProvider::IsReadOnly プロパティを FALSE に設定する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IValueProvider "{C7935180-6FB3-4201-B174-7DF73ADBF64A}" #usecom global IValueProvider IID_IValueProvider "{}" #comfunc global IValueProvider_SetValue 3 wstr #comfunc global IValueProvider_get_Value 4 var #comfunc global IValueProvider_get_IsReadOnly 5 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IValueProvider "{C7935180-6FB3-4201-B174-7DF73ADBF64A}" #usecom global IValueProvider IID_IValueProvider "{}" #comfunc global IValueProvider_SetValue 3 wstr #comfunc global IValueProvider_get_Value 4 sptr #comfunc global IValueProvider_get_IsReadOnly 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。