2012-05-10 10 views
6

Tengo un botón denominado CWnd clase derivada de, y quieren utilizar CWnd funciones de accesibilidad, puedo reemplazar esta función en mi clase:funciones anulado para la interfaz IAccessible no funcionan en Cwnd-drived clase

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

Cuando Ejecuto el programa y establezco un punto de inflexión en la implementación de cualquiera de estas funciones, el programa no ingresa a estas funciones, y en su lugar utiliza la función principal, ¿puede ayudarme alguien?

implementación de get_accName:

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

llamo EnableActiveAccessibility() en el constructor de esta clase, pero no funciona todavía.

+0

Cuando puedo reemplazar el método get_accName en IAccessible interfaz para un cuadro combinado en una aplicación MFC basada diálogo, el método es ejecutado. Pero cuando se anula para otros controles estándar como Button, Edit, Checkbox, la ejecución no llega. –

+0

¿No pretendes usar 'get_accValue'? – sergiol

Respuesta

0

Ha intentado algo así como:

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

Cuando una clase _ "Button" _ se hereda de _ "CButton" _, _ _ "get_accName" _ no se ejecuta. –

0

Se le puede llamar a esos métodos sobrecargadas de forma incorrecta. Intenta cambiar el nombre de la anulación. Puede aclarar las cosas y señalar si algo está mal. Vea a continuación para una implementación de ejemplo.

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

invocarlo como:

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

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

De CodeProjects

Cuestiones relacionadas