Bagikan melalui


Mengekspos Kontrol Berdasarkan Kontrol Sistem

Anda harus mempertimbangkan untuk menggunakan beberapa bentuk Anotasi Dinamis—Langsung, Peta Nilai, atau Server—sebelum mencoba teknik yang dijelaskan di bagian ini. Untuk informasi selengkapnya, lihat API Anotasi Dinamis.

Dalam kebanyakan kasus, Microsoft Active Accessibility mengekspos informasi tentang kontrol superkelas atau subkelas. Superclassing dan subkelas memungkinkan pengembang aplikasi untuk membuat kontrol kustom dengan fungsionalitas dasar kontrol sistem dan menyertakan peningkatan yang disediakan oleh aplikasi. Kontrol superkelas memiliki nama kelas jendela yang berbeda dari kontrol sistem yang menjadi dasarnya. Kontrol subkelas memiliki nama kelas jendela yang sama. Untuk informasi selengkapnya tentang superclassing dan subkelas, lihat dokumentasi Windows Software Development Kit (SDK).

Karena Aksesibilitas Aktif Microsoft memaparkan informasi tentang kontrol yang disediakan sistem, Aksesibilitas Aktif Microsoft memaparkan kontrol yang dimodifikasi kecuali kontrol superclassed atau subkelas secara signifikan berbeda dari kontrol dasar. Untuk menentukan apakah kontrol yang dimodifikasi dapat diakses, pengembang aplikasi harus menggunakan utilitas seperti Inspect dan Accessible Event Watcher untuk membandingkan perilaku kontrol yang dimodifikasi dengan kontrol dasar.

Jika setelah menggunakan utilitas ini, Anda menentukan bahwa kontrol yang dimodifikasi tidak dapat diakses, Anda harus memperlakukan kontrol sebagai kontrol kustom lainnya. Kontrol harus memicu peristiwa, dan prosedur jendela aplikasi harus merespons pesan WM_GETOBJECTdengan menyediakan antarmuka IAccessible yang digunakan aplikasi klien untuk mendapatkan informasi tentang kontrol.

CreateStdAccessibleProxy dan CreateStdAccessibleObject

Jika semua atau sebagian besar properti IAccessible untuk kontrol yang dimodifikasi sama dengan kontrol dasar, gunakan CreateStdAccessibleProxy atau CreateStdAccessibleObject untuk menyederhanakan implementasi antarmuka IAccessible kontrol.

Catatan

Saat superclassing atau subkelas kontrol yang dapat diakses, ketahuilah bahwa objek yang diambil oleh fungsi CreateStdAccessibleObject dapat mengimplementasikan lebih dari sekadar antarmuka IAccessible . Ini mungkin termasuk antarmuka lain seperti IEnumVARIANT. Anda mungkin perlu membungkus antarmuka tambahan ini untuk mempertahankan dukungan aksesibilitas yang disediakan oleh implemenasi asli kontrol.

 

Fungsi CreateStdAccessibleProxy dan CreateStdAccessibleObject mengambil penunjuk antarmuka IAccessible untuk kontrol sistem yang ditentukan. Perbedaan dalam fungsi-fungsi ini adalah bahwa CreateStdAccessibleObject menggunakan nama kelas jendela yang diperoleh dari parameter hwnd-nya sedangkan CreateStdAccessibleProxy menggunakan nama kelas jendela yang ditentukan dalam parameter szClassName-nya . Oleh karena itu, jika Anda memutuskan untuk menggunakan fungsi-fungsi ini, gunakan CreateStdAccessibleProxy untuk mengekspos informasi tentang kontrol superkelas, dan salah satu fungsi dengan kontrol subkelas.

Setelah mendapatkan penunjuk antarmuka IAccessible ke kontrol sistem, gunakan penunjuk dalam implementasi antarmuka IAccessible Anda untuk kontrol yang dimodifikasi. Jika properti atau metode untuk kontrol yang dimodifikasi sama dengan kontrol dasar, gunakan penunjuk IAccessible untuk mengembalikan informasi yang disediakan oleh kontrol dasar. Jika properti untuk kontrol yang dimodifikasi berbeda dari kontrol dasar, ganti properti kontrol dasar.

Dalam contoh berikut, CAccCustomButton adalah kelas yang ditentukan aplikasi yang berasal dari IAccessible. Variabel anggota m_pAccDefaultButton adalah penunjuk ke antarmuka IAccessible yang diambil dari CreateStdAccessibleObject selama prosedur inisialisasi untuk kontrol. Dalam contoh ini, properti Peran untuk kontrol kustom sama dengan properti Peran kontrol sistem, sehingga properti Peran kontrol dasar dikembalikan. Namun, properti Deskripsi berbeda dari kontrol dasar, sehingga properti ini ditimpa.

HRESULT CAccCustomButton::Initialize( HWND hWnd, HINSTANCE hInst )
{
.
.
.
    hr = CreateStdAccessibleObject( m_hWnd, 
                                    OBJID_CLIENT, 
                                    IID_IAccessible, 
                                    (void **) &m__pAccDefaultButton );
.
.
.
}

STDMETHODIMP CAccCustomButton::get_accRole( VARIANT varID )
{
    return m_pAccDefaultButton->get_accRole(varID);
}


STDMETHODIMP CAccCustomButton::get_accDescription( VARIANT varChild,
                                                   BSTR* pszDesc )
{
    TCHAR   szString[256];
    OLECHAR wszString[256];

    LoadString( m_hInst, ID_DESCRIPTION, szString, 256 );
    MultiByteToWideChar( CP_ACP, 0, szString, -1, wszString, 256 );
   *pszDesc = SysAllocString( wszString );
   if ( !pszDesc )
       return S_OK;
   else
       return E_OUTOFMEMORY;
}

Untuk informasi selengkapnya tentang properti IAccessible dan metode kontrol sistem, lihat Lampiran A: Referensi Elemen Antarmuka Pengguna yang Didukung.