IAccessible::get_accState 方法 (oleacc.h)
IAccessible::get_accState 方法會擷取指定物件的目前狀態。 所有物件都支援這個屬性。
語法
HRESULT get_accState(
[in] VARIANT varChild,
[out, retval] VARIANT *pvarState
);
參數
[in] varChild
類型: VARIANT
指定擷取的狀態資訊是否屬於物件或其中一個物件的子專案。 此參數CHILDID_SELF (取得对象) 的相關信息或子標識碼 (,以取得對象子元素的相關信息) 。 如需初始化 VARIANT 的詳細資訊,請參閱 如何在參數中使用子標識碼。
[out, retval] pvarState
類型: VARIANT*
VARIANT 結構的位址,該結構會接收描述對象狀態的資訊。 vt 成員VT_I4,lVal 成員是一或多個對象狀態常數。
傳回值
類型: HRESULT
如果成功,則傳回 S_OK。
如果未成功,則會傳回下表中的其中一個值,或另一個標準 COM 錯誤碼。 伺服器會傳回這些值,但客戶端必須一律檢查輸出參數,以確保它們包含有效的值。 如需詳細資訊,請參閱 檢查 IAccessible 傳回值。
錯誤 | Description |
---|---|
|
引數無效。 |
備註
如果傳回預先定義的狀態值,用戶端會呼叫 GetStateText 來擷取描述物件狀態的當地語系化字串。
子系的實際狀態通常取決於其上階的狀態。 例如,當模式對話框開啟時,應用程式主視窗中的控件無法設為焦點,但控件可能不會報告此狀態。 若要驗證子物件的狀態資訊,請呼叫父物件的 get_accState 。
請記下伺服器開發人員: 您必須使用預先定義的狀態常數。
伺服器範例
下列範例程式代碼示範自定義清單框的這個方法可能實作,以維護自己的子專案 (清單專案) ,一次只能選取其中一個專案。 如果用戶端要求清單框本身的狀態,此方法會將呼叫傳遞給提供控件視窗的標準可存取物件。 針對子專案,會根據是否選取專案,傳回不同的旗標。
// 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 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | oleacc.h |
程式庫 | Oleacc.lib |
Dll | Oleacc.dll |
可轉散發套件 | Windows NT 4.0 和 Windows 95 上的 Active Accessibility 1.3 RDK |