IAccessible::get_accState メソッド (oleacc.h)
IAccessible::get_accState メソッドは、指定したオブジェクトの現在の状態を取得します。 すべてのオブジェクトがこのプロパティをサポートします。
構文
HRESULT get_accState(
[in] VARIANT varChild,
[out, retval] VARIANT *pvarState
);
パラメーター
[in] varChild
型: VARIANT
取得した状態情報がオブジェクトに属するか、オブジェクトの子要素の 1 つに属するかを指定します。 このパラメーターは、CHILDID_SELF (オブジェクトに関する情報を取得するため) または子 ID (オブジェクトの子要素に関する情報を取得する場合) のいずれかです。 VARIANT の初期化の詳細については、「パラメーターでの子 ID の使用方法」を参照してください。
[out, retval] pvarState
型: VARIANT*
オブジェクトの状態を説明する情報を受け取る VARIANT 構造体 のアドレス。 vt メンバーがVT_I4され、lVal メンバーが 1 つ以上のオブジェクト状態定数です。
戻り値
型: HRESULT
成功した場合は、S_OK を返します。
成功しなかった場合は、次のテーブルの値の 1 つ、または別の標準 COM エラー コードを返します。 サーバーはこれらの値を返しますが、クライアントは常に出力パラメーターをチェックして、有効な値が含まれていることを確認する必要があります。 詳細については、「 IAccessible 戻り値の確認」を参照してください。
エラー | 説明 |
---|---|
|
引数が有効ではありません。 |
注釈
定義済みの状態値が返された場合、クライアントは GetStateText を 呼び出して、オブジェクトの状態を記述するローカライズされた文字列を取得します。
子供の実際の状態は、多くの場合、その先祖の状態に依存します。 たとえば、モーダル ダイアログ ボックスが開いている場合、アプリケーションのメイン ウィンドウ内のコントロールはフォーカスできませんが、コントロールはこの状態を報告しない可能性があります。 子オブジェクトの状態情報を確認するには、親オブジェクトの get_accState を呼び出します。
サーバー開発者への注意: 定義済みの状態定数を使用する必要があります。
サーバーの例
次のコード例は、独自の子要素 (リスト アイテム) を保持するカスタム リスト ボックスに対して、このメソッドの実装が可能であり、そのうちの 1 つだけを一度に選択できることを示しています。 クライアントがリスト ボックス自体の状態を要求した場合、 メソッドは、コントロール ウィンドウを提供する標準のアクセス可能なオブジェクトに呼び出しを渡します。 子項目の場合、項目が選択されているかどうかに応じて、異なるフラグが返されます。
// m_pStdAccessibleObject is the standard accessible object returned by CreateAccessibleObject.
// m_pControl is the custom control instance that returns this accessible object.
HRESULT STDMETHODCALLTYPE AccServer::get_accState(
VARIANT varChild,
VARIANT *pvarState)
{
if (varChild.vt != VT_I4)
{
pvarState->vt = VT_EMPTY;
return E_INVALIDARG;
}
if (varChild.lVal == CHILDID_SELF)
{
return m_pStdAccessibleObject->get_accState(varChild, pvarState);
}
else // For list items.
{
DWORD flags = STATE_SYSTEM_SELECTABLE;
int index = (int)varChild.lVal - 1;
if (index == m_pControl->GetSelectedIndex())
{
flags |= STATE_SYSTEM_SELECTED;
}
pvarState->vt = VT_I4;
pvarState->lVal = flags;
}
return S_OK;
};
クライアントの例
次の関数例は、指定したアクセシビリティ対応オブジェクトまたは子要素の状態を表示します。
HRESULT PrintState(IAccessible* pAcc, long childId)
{
if (pAcc == NULL)
{
return E_INVALIDARG;
}
VARIANT varChild;
varChild.vt = VT_I4;
varChild.lVal = childId;
VARIANT varResult;
HRESULT hr = pAcc->get_accState(varChild, &varResult);
long stateBits = 0;
if ((hr == S_OK) && (varResult.vt == VT_I4))
{
printf("State: ");
stateBits = (DWORD)varResult.lVal;
for (DWORD mask = 1; mask <= 0x8000; mask <<= 1)
{
if (mask & stateBits)
{
// Get the length of the string.
UINT stateLength = GetStateText(mask, NULL, 0);
// Allocate memory for the string. Add one character to
// the length you got in the previous call to make room
// for the null character.
LPTSTR lpszStateString = (LPTSTR)malloc(
(stateLength + 1) * sizeof(TCHAR));
if (lpszStateString != NULL)
{
// Get the string.
GetStateText(mask,
lpszStateString, stateLength + 1);
#ifdef UNICODE
printf("%S\n", lpszStateString);
#else
printf(("%s\n", lpszStateString);
#endif
// Free the allocated memory
free(lpszStateString);
}
else
{
return E_OUTOFMEMORY;
}
}
}
}
return hr;
}
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | oleacc.h |
Library | Oleacc.lib |
[DLL] | Oleacc.dll |
再頒布可能パッケージ | Windows NT 4.0 および Windows 95 でのアクティブなアクセシビリティ 1.3 RDK |