2012-05-10 27 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