IAccessible::get_accState 메서드(oleacc.h)

IAccessible::get_accState 메서드는 지정된 개체의 현재 상태를 검색합니다. 모든 개체는 이 속성을 지원합니다.

구문

HRESULT get_accState(
  [in]          VARIANT varChild,
  [out, retval] VARIANT *pvarState
);

매개 변수

[in] varChild

형식: VARIANT

검색된 상태 정보가 개체에 속하는지 또는 개체의 자식 요소 중 하나에 속하는지 여부를 지정합니다. 이 매개 변수는 CHILDID_SELF(개체에 대한 정보를 가져오기 위해) 또는 자식 ID(개체의 자식 요소에 대한 정보를 얻기 위해)입니다. VARIANT를 초기화하는 방법에 대한 자세한 내용은 매개 변수에서 자식 ID를 사용하는 방법을 참조하세요.

[out, retval] pvarState

형식: VARIANT*

개체의 상태를 설명하는 정보를 수신하는 VARIANT 구조 체의 주소입니다. vt 멤버가 VT_I4 lVal 멤버는 개체 상태 상수 중 하나 이상입니다.

반환 값

형식: HRESULT

성공하면 S_OK를 반환합니다.

성공하지 못하면 다음 테이블의 값 중 하나 또는 다른 표준 COM 오류 코드를 반환합니다. 서버는 이러한 값을 반환하지만 클라이언트는 항상 출력 매개 변수를 검사 유효한 값을 포함해야 합니다. 자세한 내용은 IAccessible 반환 값 확인을 참조하세요.

오류 Description
E_INVALIDARG
인수가 잘못된 경우.

설명

미리 정의된 상태 값이 반환되면 클라이언트는 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 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 oleacc.h
라이브러리 Oleacc.lib
DLL Oleacc.dll
재배포 가능 파일 Windows NT 4.0 및 Windows 95의 활성 접근성 1.3 RDK

추가 정보

GetStateText

IAccessible

개체 상태 상수

State 속성

변형