Metode IAccessible::accNavigate (oleacc.h)
Metode IAccessible::accNavigate melintasi elemen UI lain dalam kontainer dan mengambil objek . Metode ini bersifat opsional.
Sintaks
HRESULT accNavigate(
[in] long navDir,
[in] VARIANT varStart,
[out, retval] VARIANT *pvarEndUpAt
);
Parameter
[in] navDir
Jenis: panjang
Menentukan arah untuk menavigasi. Arah ini dalam urutan spasial , seperti kiri atau kanan, atau urutan logis , seperti berikutnya atau sebelumnya. Nilai ini adalah salah satu konstanta navigasi.
[in] varStart
Jenis: VARIAN
Menentukan apakah objek awal navigasi adalah objek itu sendiri atau salah satu anak objek. Parameter ini CHILDID_SELF (untuk memulai dari objek) atau ID anak (untuk memulai dari salah satu elemen turunan objek). Untuk informasi selengkapnya tentang menginisialisasi VARIAN, lihat Cara ID Anak Digunakan dalam Parameter.
[out, retval] pvarEndUpAt
Jenis: VARIAN*
[out, retval] Alamat struktur VARIAN yang menerima informasi tentang objek tujuan. Tabel berikut ini menjelaskan informasi yang dikembalikan dalam pvarEnd.
anggota vt | Anggota nilai |
---|---|
|
Tidak ada. Tidak ada elemen UI dalam arah yang ditentukan. |
|
lVal berisi ID anak dari elemen UI. |
|
pdispVal berisi alamat IDispatch elemen UI. |
Mengembalikan nilai
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 dan Mengembalikan Nilai.
Kesalahan | Deskripsi |
---|---|
|
Tidak ada elemen layar yang ditemukan dalam arah yang ditentukan. |
|
Objek tidak mendukung metode ini. |
|
Argumen tidak valid. |
Keterangan
Navigasi, baik spasial maupun logis, selalu dibatasi untuk elemen UI dalam kontainer. Dengan navigasi spasial, klien hanya menavigasi ke saudara kandung dari objek awal (varStart). Bergantung pada bendera navigasi yang digunakan dengan navigasi logis, klien menavigasi ke anak atau ke saudara kandung dari objek awal.
Metode accNavigate mengambil elemen UI yang memiliki lokasi layar yang ditentukan, dan objek yang tidak terlihat yang tidak memiliki lokasi layar yang ditentukan.
Metode ini tidak mengubah pilihan atau fokus. Untuk mengubah fokus atau memilih objek, gunakan IAccessible::accSelect.
Untuk mencegah perulangan saat melintasi elemen layar, accNavigate mengembalikan S_FALSE dengan VT_EMPTY saat Anda menentukan NAVDIR_NEXT pada elemen terakhir, atau NAVDIR_PREVIOUS pada elemen pertama.
Seperti metode dan fungsi IAccessible lainnya, klien mungkin menerima kesalahan untuk penunjuk antarmuka IAccessible karena tindakan pengguna. Untuk informasi selengkapnya, lihat Menerima Kesalahan untuk Penunjuk Antarmuka IAccessible.
Beberapa elemen UI yang ditentukan sistem seperti menu, item menu, dan menu pop-up memungkinkan navigasi ke objek yang tidak terlihat. Namun, elemen UI lain yang ditentukan sistem tidak mendukung ini. Server dapat memilih apakah akan mendukung navigasi ke objek yang tidak terlihat dan dapat melewati atau mengeksposnya.
Aplikasi klien harus mengembalikan nilai pengembalian pasca-proses saat menggunakan accNavigate untuk menavigasi antar objek. Tujuan dari langkah-langkah pasca-pemrosesan adalah untuk memberi klien penunjuk antarmuka IAccessible dan ID anak sehingga mereka dapat menggunakan metode dan properti IAccessible untuk elemen UI.
Tabel berikut ini menjelaskan kemungkinan skenario untuk IAccessible::accNavigate, berdasarkan kriteria berikut:
- Titik awal yang ditentukan (baik Anda memulai dengan objek penuh atau elemen sederhana)
- Hasilnya dikembalikan ( IDispatch atau ID anak VT_I4)
- Pasca-pemrosesan yang perlu dilakukan aplikasi klien untuk memiliki penunjuk antarmuka IAccessible dan ID anak
Tabel ini menjelaskan bendera NAVDIR_ berikut: NEXT, PREVIOUS, LEFT, RIGHT, UP, dan DOWN. Untuk informasi selengkapnya tentang bendera navigasi, lihat Konstanta Navigasi.
Titik awal | Hasil dikembalikan | Pasca-pemrosesan untuk nilai yang dikembalikan |
---|---|---|
pStartAcc, startID | VT_I4 endID | Panggil get_accChild di pStartAcc passing endID. Ikuti prosedur normal yang diuraikan dalam get_accChild. |
pStartAcc, startID | VT_DISPATCH pEndAcc | Gunakan prosedur standar untuk mengonversi penunjuk antarmuka IDispatch ke penunjuk antarmuka IAccessible untuk pEndAcc. |
pStartAcc, CHILDID_SELF | VT_I4 endID | Panggil get_accParent di pStartAcc, melewati CHILDID_SELF untuk mendapatkan penunjuk antarmuka IAccessible induk untuk endID. Kemudian, panggil get_accChild pada penunjuk antarmuka IAccessible , melewati endID. Ikuti prosedur normal yang diuraikan dalam get_accChild. |
pStartAcc, CHILDID_SELF | VT_DISPATCH pEndAcc | Gunakan prosedur standar untuk mengonversi penunjuk antarmuka IDispatch ke penunjuk antarmuka IAccessible untuk pEndAcc. |
Tabel berikut ini menjelaskan bendera navigasi NAVDIR_FIRSTCHILD dan NAVDIR_LASTCHILD. Ini tidak termasuk entri untuk menavigasi ke anak pertama atau terakhir ketika titik awal adalah elemen sederhana karena elemen sederhana tidak dapat memiliki anak.
Titik awal | Hasil dikembalikan | Pasca-pemrosesan untuk nilai yang dikembalikan |
---|---|---|
pStartAcc, CHILDID_SELF | VT_I4 endID | Panggil get_accChild di pStartAcc, melewati endID. Ikuti prosedur normal yang diuraikan dalam get_accChild. |
pStartAcc, CHILDID_SELF | VT_DISPATCH pEndAcc | Gunakan prosedur standar untuk mengonversi penunjuk antarmuka IDispatch ke penunjuk antarmuka IAccessible untuk pEndAcc. |
Untuk informasi selengkapnya, lihat Properti dan Metode Navigasi Objek.
Contoh Server
Contoh berikut menunjukkan kemungkinan implementasi metode untuk kotak daftar kustom yang item daftarnya adalah elemen anak.
// m_pControl is the control that returns this accessible object.
// m_pStdAccessibleObject is the standard accessible object for the window
// that contains the control.
HRESULT STDMETHODCALLTYPE AccServer::accNavigate(
long navDir,
VARIANT varStart,
VARIANT *pvarEndUpAt)
{
// Default value.
pvarEndUpAt->vt = VT_EMPTY;
if (varStart.vt != VT_I4)
{
return E_INVALIDARG;
}
switch (navDir)
{
case NAVDIR_FIRSTCHILD:
if (varStart.lVal == CHILDID_SELF)
{
pvarEndUpAt->vt = VT_I4;
pvarEndUpAt->lVal = 1;
}
else // Starting with child.
{
return S_FALSE;
}
break;
case NAVDIR_LASTCHILD:
if (varStart.lVal == CHILDID_SELF)
{
pvarEndUpAt->vt = VT_I4;
pvarEndUpAt->lVal = m_pControl->GetCount();
}
else // Starting with child.
{
return S_FALSE;
}
break;
case NAVDIR_NEXT:
case NAVDIR_DOWN:
if (varStart.lVal != CHILDID_SELF)
{
pvarEndUpAt->vt = VT_I4;
pvarEndUpAt->lVal = varStart.lVal + 1;
// Out of range.
if (pvarEndUpAt->lVal > m_pControl->GetCount())
{
pvarEndUpAt->vt = VT_EMPTY;
return S_FALSE;
}
}
else // Call through to method on standard object.
{
return m_pStdAccessibleObject->accNavigate(navDir, varStart, pvarEndUpAt);
}
break;
case NAVDIR_PREVIOUS:
case NAVDIR_UP:
if (varStart.lVal != CHILDID_SELF)
{
pvarEndUpAt->vt = VT_I4;
pvarEndUpAt->lVal = varStart.lVal - 1;
// Out of range.
if (pvarEndUpAt->lVal <1)
{
pvarEndUpAt->vt = VT_EMPTY;
return S_FALSE;
}
}
else // Call through to method on standard object.
{
return m_pStdAccessibleObject->accNavigate(navDir, varStart, pvarEndUpAt);
}
break;
// Unsupported directions.
case NAVDIR_LEFT:
case NAVDIR_RIGHT:
if (varStart.lVal == CHILDID_SELF)
{
return m_pStdAccessibleObject->accNavigate(navDir, varStart, pvarEndUpAt);
}
else
{
pvarEndUpAt->vt = VT_EMPTY;
return S_FALSE;
}
break;
}
return S_OK;
};
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 dengan SP6 dan yang lebih baru dan Windows 95 |