2012-05-10 23 views
6

我有一個名爲按鈕CWnd派生類的工作,並希望使用CWnd無障礙功能,我在類中重寫這個功能:重寫功能在的CWnd掘進類

virtual HRESULT get_accName(VARIANT varChild, BSTR *pszName); 
virtual HRESULT get_accChildCount(long *pcountChildren); 
virtual HRESULT get_accDefaultAction(VARIANT varChild, BSTR *pszDefaultAction); 
virtual HRESULT get_accDescription(VARIANT varChild, BSTR *pszDescription); 
virtual HRESULT get_accKeyboardShortcut(VARIANT varChild, BSTR *pszKeyboardShortcut); 
virtual HRESULT get_accParent(IDispatch **ppdispParent); 
virtual HRESULT get_accRole(VARIANT varChild, VARIANT *pvarRole); 
virtual HRESULT get_accState(VARIANT varChild, VARIANT *pvarState); 
virtual HRESULT get_accValue(VARIANT varChild, BSTR *pszValue); 

當我運行這個程序,並且在實現這些函數中設置了一個斷點,程序不會輸入這些函數,而是使用父函數,可以幫助我嗎?

實施get_accName的:

HRESULT Button::get_accName(VARIANT varChild, BSTR *pszName) 
{ 
    //*pszName = SysAllocString(lpstrTitle); 
    return S_OK; 
} 

我打電話EnableActiveAccessibility()在這個類的構造函數,但尚不能工作。

+0

當我重寫的IAccessible接口的get_accName方法在一個基於對話框的MFC應用程序的組合框,該方法被執行。但是當它被其他標準控件覆蓋時,如按鈕,編輯,複選框,執行不會到達那裏。 –

+0

你是不是假裝使用'get_accValue'? – sergiol

回答

0

你有沒有嘗試過這樣的:

class CWnd { 
    virtual HRESULT get_accChildCount(long *pcountChildren); 
}; 

class Button : public CWnd { 

    virtual HRESULT get_accChildCount(long *pcountChildren) { 

    HRESULT childCount = CWnd:get_accChildCount(long *pcountChildren); 

    //you can use the value from the ancestor class if it is of any use 
    //to you or add your own code 
    childCount = 1234; 

    return childCount; 
    } 
}; 
+0

當_「Button」_類從_「CButton」_繼承時,不會執行_「get_accName」_。 –

0

您可能會錯誤地調用這些重寫的方法。嘗試重命名覆蓋。它可以讓事情更清楚,並指出是否有任何問題。請參閱下面的示例實現。

ref class Base 
{ 
public:  
    virtual void Boo() 
    { 
     Show("Base::Boo"); 
    }  
}; 

ref class Derived : Base 
{ 
public:  
    //Overrides Base::Boo 
    virtual void Woo() = Base::Boo 
    { 
     Show("Derived::Woo"); 
    } 
}; 

調用它像:

void _tmain() 
{ 
    Base* r = new Derived(); 

    Derived* d = dynamic_cast<Derived*>(r); 
    d->Woo(); 
} 

CodeProjects