2012-05-10 3 views
6

Ho un pulsante denominato CWnd classe -derived, e vogliono usare CWnd funzioni di accessibilità, sovrascrivo questa funzione nella mia classe:funzioni sovrascritte per l'interfaccia IAccessible non funzionano in CWnd-pilotato classe

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

Quando Eseguo il programma e imposta un punto di rottura nell'implementazione di una di queste funzioni, il programma non entra in queste funzioni e utilizza la funzione genitore, può aiutarmi?

attuazione get_accName:

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

io chiamo EnableActiveAccessibility() nel costruttore di questa classe, ma non funziona ancora.

+0

Quando ho l'override del metodo get_accName in IAccessible interfaccia per una casella combinata in un'applicazione MFC di dialogo basata, il metodo viene eseguito. Ma quando viene sovrascritto per altri controlli standard come Button, Modifica, Casella di controllo, l'esecuzione non arriva. –

+0

Non fai finta di usare 'get_accValue'? – sergiol

risposta

0

Hai provato qualcosa di simile:

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

Quando una classe _ "Button" _ viene ereditata da _ "CButton" _, il _ "get_accName" _ non viene eseguito. –

0

sarai in invocano questi metodi sovrascritto in modo non corretto. Prova a rinominare l'override. Può chiarire le cose e indicare se qualcosa non va. Vedi sotto per un'implementazione di esempio.

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 come:

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

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

Da CodeProjects