共用方式為


根據系統控制項公開控制項

在嘗試本節所述的技術之前,您應該考慮使用某種形式的動態注釋:直接、值對應或伺服器。 如需詳細資訊,請參閱 動態注釋 API

在大部分情況下,Microsoft Active Accessibility 會公開超類別或子類別化控制項的相關資訊。 超類別和子類別化可讓應用程式開發人員建立具有系統控制項基本功能的自訂控制項,並包含應用程式的增強功能。 超類別控制項的視窗類別名稱與所依據的系統控制項不同。 子類別化控制項具有相同的視窗類別名稱。 如需超類別和子類別化的詳細資訊,請參閱 Windows 軟體發展工具組 (SDK) 檔。

由於 Microsoft Active Accessibility 會公開系統提供之控制項的相關資訊,除非超類別或子類別化控制項與基底控制項明顯不同,否則 Microsoft Active Accessibility 會公開修改的控制項。 若要判斷修改的控制項是否可供存取,應用程式開發人員應該使用 檢查無障礙事件監看員 等公用程式,來比較修改控制項與基底控制項的行為。

如果使用這些公用程式之後,如果您判斷無法存取修改的控制項,則必須將控制項視為任何其他自訂控制項。 控制項必須觸發事件,而應用程式的視窗程式必須藉由提供用戶端應用程式用來取得控制項相關資訊的IAccessible介面來回應WM_GETOBJECT訊息。

CreateStdAccessibleProxy 和 CreateStdAccessibleObject

如果修改之控制項的所有或大部分 IAccessible 屬性都與基底控制項相同,請使用 CreateStdAccessibleProxyCreateStdAccessibleObject 來簡化控制項 IAccessible 介面的實作。

注意

當超類別化或子類別化可存取控制項時,請注意 CreateStdAccessibleObject 函式所擷取的物件可能不只是 實作 IAccessible 介面。 它可能包含其他介面,例如 IEnumVARIANT。 您可能需要包裝這些額外的介面,以保留控制項原始插補所提供的協助工具支援。

 

CreateStdAccessibleProxyCreateStdAccessibleObject函式會擷取指定系統控制項的IAccessible介面指標。 這些函式的差異在於 CreateStdAccessibleObject 會使用從 其 hwnd 參數取得的視窗類別名稱,而 CreateStdAccessibleProxy 則會使用 其 szClassName 參數中指定的視窗類別名稱。 因此,如果您決定使用這些函式,請使用 CreateStdAccessibleProxy 來公開超分類控制項的相關資訊,以及具有子類別化控制項的任一函式。

取得系統控制項的 IAccessible 介面指標之後,請在修改控制項的 IAccessible 介面實作中使用指標。 如果修改之控制項的屬性或方法與基底控制項相同,請使用 IAccessible 指標傳回基底控制項提供的資訊。 如果已修改控制項的屬性與基底控制項不同,請覆寫基底控制項的 屬性。

在下列範例中, CAccCustomButton 是衍生自 IAccessible的應用程式定義類別。 成員變數m_pAccDefaultButton是控制項初始化程式期間從CreateStdAccessibleObject擷取的IAccessible介面指標。 在此範例中,自訂控制項的 Role 屬性與系統控制項的 Role 屬性相同,因此會傳回基底控制項的 Role 屬性。 不過, Description 屬性與基底控制項的屬性不同,因此會覆寫此屬性。

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

如需系統控制項 之 IAccessible 屬性和方法的詳細資訊,請參閱 附錄 A:支援的使用者介面元素參考