Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ IAccessible接口的重写函数在cwnd驱动类中不起作用_Visual C++_Mfc_Accessibility_Cwnd - Fatal编程技术网

Visual c++ IAccessible接口的重写函数在cwnd驱动类中不起作用

Visual c++ IAccessible接口的重写函数在cwnd驱动类中不起作用,visual-c++,mfc,accessibility,cwnd,Visual C++,Mfc,Accessibility,Cwnd,我有一个名为button的CWnd-派生类,如果要使用CWnd辅助功能,我将在我的类中重写此功能: virtual HRESULT get_accName(VARIANT varChild, BSTR *pszName); virtual HRESULT get_accChildCount(long *pcountChildren); virtual HRESULT get_accDefaultAction(VARIANT varChild, BSTR *pszDefaultAction); v

我有一个名为button的
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()
,但还没有成功。

您是否尝试过类似的方法:

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

您可能错误地调用了这些被重写的方法。尝试重命名覆盖。它可以使事情变得更清楚,并指出是否有任何错误。参见下面的示例实现

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();
}
void\u tmain()
{ 
Base*r=新派生的();
导出*d=动态_投射(r);
d->Woo();
}

当我在基于对话框的MFC应用程序中的组合框的IAccessible接口中重写get_accName方法时,该方法将被执行。但是当它被其他标准控件(如Button、Edit、Checkbox)覆盖时,执行不会到达那里。您是否假装使用
get_accValue
?当“Button”类从“CButton”继承时,“get_accName”不会执行。