Bagikan melalui


Metode IAccessible::get_accState (oleacc.h)

Metode IAccessible::get_accState mengambil status objek yang ditentukan saat ini. Semua objek mendukung properti ini.

Sintaks

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

Parameter

[in] varChild

Jenis: VARIAN

Menentukan apakah informasi status yang diambil milik objek atau salah satu elemen anak objek. Parameter ini CHILDID_SELF (untuk mendapatkan informasi tentang objek) atau ID anak (untuk mendapatkan informasi tentang elemen anak objek). Untuk informasi selengkapnya tentang menginisialisasi VARIAN, lihat Bagaimana ID Anak Digunakan dalam Parameter.

[out, retval] pvarState

Jenis: VARIAN*

Alamat struktur VARIAN yang menerima informasi yang menjelaskan status objek. Anggota vt VT_I4, dan anggota lVal adalah satu atau beberapa konstanta status objek.

Nilai kembali

Jenis: HRESULT

Jika berhasil, mengembalikan S_OK.

Jika tidak berhasil, mengembalikan salah satu nilai dalam tabel berikut, atau kode kesalahan COM standar lainnya. Server mengembalikan nilai-nilai ini, tetapi klien harus selalu memeriksa parameter output untuk memastikan bahwa nilai tersebut berisi nilai yang valid. Untuk informasi selengkapnya, lihat Memeriksa Nilai Pengembalian IAccessible.

Kesalahan Deskripsi
E_INVALIDARG
Argumen tidak valid.

Keterangan

Jika nilai status yang telah ditentukan sebelumnya dikembalikan, klien memanggil GetStateText untuk mengambil string yang dilokalkan yang menjelaskan status objek.

Keadaan aktual anak sering tergantung pada keadaan leluhurnya. Misalnya, kontrol di jendela utama aplikasi tidak dapat difokuskan ketika kotak dialog modal terbuka, tetapi kontrol mungkin tidak melaporkan status ini. Untuk memverifikasi informasi status objek anak, panggil get_accState untuk objek induk.

Catatan untuk pengembang server: Anda harus menggunakan konstanta status yang telah ditentukan sebelumnya.

Contoh Server

Contoh kode berikut menunjukkan kemungkinan implementasi metode ini untuk kotak daftar kustom yang mempertahankan elemen anaknya sendiri (item daftar), hanya salah satunya yang dapat dipilih pada satu waktu. Jika klien meminta status kotak daftar itu sendiri, metode meneruskan panggilan ke objek standar yang dapat diakses yang melayani jendela kontrol. Untuk item anak, bendera yang berbeda dikembalikan tergantung pada apakah item dipilih atau tidak.

// 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;
};

Contoh Klien

Contoh fungsi berikut menampilkan status objek yang dapat diakses yang ditentukan atau elemen anak.

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;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2003 [hanya aplikasi desktop]
Target Platform Windows
Header oleacc.h
Pustaka Oleacc.lib
DLL Oleacc.dll
Redistribusi Aksesibilitas Aktif 1.3 RDK pada Windows NT 4.0 dan Windows 95

Lihat juga

GetStateText

IAccessible

Konstanta Status Objek

Properti Status

VARIAN