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

IValueProvider

COM
IIDc7935180-6fb3-4201-b174-7df73adbf64a継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

範囲を持たず、文字列として表現できる固有の値を持つコントロールへのアクセスを提供します。

解説(Remarks)

コントロールの値は、コントロールおよびその設定に応じて編集可能な場合と編集できない場合があります。

Value コントロールパターンをサポートする必要がある Microsoft UI Automation プロバイダーに実装されます。

メソッド 3

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

vtbl 3 HRESULT SetValue(LPWSTR val)

コントロールの値を設定します。

valLPWSTRin設定する値。プロバイダーは、値を適切なデータ型に変換する責任を負います。

戻り値

Type: HRESULT

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

解説(Remarks)

単一行の編集コントロールは、IValueProvider を実装することで、その内容へのプログラムによるアクセスをサポートします。 ただし、複数行の編集コントロールは IValueProvider を実装しません。 代わりに、ITextProvider を実装することで、その内容へのアクセスを提供します。

ListItem や TreeItem などのコントロールは、いずれかの項目の値が編集可能である場合、コントロールの現在の編集モードにかかわらず IValueProvider を実装する必要があります。 子項目が編集可能である場合は、親コントロールも IValueProvider を実装する必要があります。

vtbl 4 HRESULT get_Value(LPWSTR* pRetVal)

コントロールの値。

pRetValLPWSTR*out要素の現在の値を文字列で受け取る LPWSTR へのポインタである。呼び出し側は SysFreeString で解放する。

解説(Remarks)

単一行の編集コントロールは、(ITextProvider に加えて) IValueProvider を実装することで、その内容へのプログラムによるアクセスをサポートします。ただし、複数行の編集コントロールは IValueProvider を実装しません。

複数行の編集コントロールのテキスト内容を取得するには、コントロールが ITextProvider を実装する必要があります。ただし、ITextProvider はコントロールの値の設定をサポートしません。

IValueProvider は、書式情報や部分文字列値の取得をサポートしません。これらのシナリオでは ITextProvider を実装してください。

vtbl 5 HRESULT get_IsReadOnly(BOOL* pRetVal)

コントロールの値が読み取り専用かどうかを示します。(IValueProvider.get_IsReadOnly)

pRetValBOOL*out要素が読み取り専用で値を変更できないかどうかを受け取る BOOL へのポインタである。

解説(Remarks)

IValueProvider::SetValue の呼び出しを許可する前に、コントロールは IsEnabled プロパティ (UIA_IsEnabledPropertyId) を TRUE に設定し、IValueProvider::IsReadOnly プロパティを FALSE に設定する必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_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 方式にも切替可。