7

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()が、まだ機能しません。

4

2 に答える 2

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から

于 2012-05-21T15:51:52.100 に答える
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;
  } 
};
于 2012-05-15T08:28:46.870 に答える