2012-05-10 10 views
6

Tôi có một CWnd lớp -derived tên nút, và muốn sử dụng chức năng CWnd khả năng tiếp cận, tôi ghi đè lên chức năng này trong lớp học của tôi:chức năng ghi đè cho giao diện IAccessible không làm việc trong CWnd-drived lớp

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

Khi Tôi chạy chương trình, và thiết lập một điểm trong việc thực hiện bất kỳ của các chức năng này, chương trình không nhập các chức năng này, và thay vì sử dụng chức năng phụ huynh, có thể giúp tôi?

thi hành get_accName:

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

tôi gọi EnableActiveAccessibility() trong constructor của lớp này, nhưng không hoạt động được nêu ra.

+0

Khi tôi ghi đè lên các phương pháp get_accName trong IAccessible Giao diện cho một combo box trong một hộp thoại dựa trên ứng dụng MFC, phương pháp này được thực hiện. Nhưng khi nó được ghi đè cho các điều khiển tiêu chuẩn khác như Button, Edit, Checkbox, việc thực hiện không đạt được điều đó. –

+0

Bạn không giả vờ sử dụng 'get_accValue'? – sergiol

Trả lời

0

Các bạn đã thử một cái gì đó như:

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

Khi một _ "Nút" _ lớp được kế thừa từ _ "CButton" _, _ "get_accName" _ không thực thi. –

0

Bạn có thể gọi các phương pháp overriden không chính xác. Thử đổi tên ghi đè. Nó có thể làm cho mọi thứ rõ ràng hơn và chỉ ra nếu có điều gì sai. Xem dưới đây để thực hiện ví dụ.

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

Gọi nó thích:

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

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

Từ CodeProjects