如何在 CMFCMenuBar 及其项目中支持可访问性

Posted

技术标签:

【中文标题】如何在 CMFCMenuBar 及其项目中支持可访问性【英文标题】:How to support accessibility in CMFCMenuBar and its items 【发布时间】:2014-04-15 16:02:12 【问题描述】:

我需要启用 CMFCMenubar 的可访问性,以便在编码 ui 测试(默认情况下不支持)中使用它,正如 this post on MSDN Visual Studio blog 中提到的那样,不完全支持 MFC 功能包控件(如 CMFCMenuBar)。

我使用了一个工具来测试我的软件中的可访问性支持,它位于路径 C:\Program Files\Windows Kits\8.1\bin\x86 "inspect.exe" 中,当我使用UI 自动化它可以工作,但是当我使用 MSAA(编码 ui 测试中使用的相同技术)时它失败了。

我尝试了以下跳跃来使其工作:

    我创建了一个新项目并选中了向导中的支持辅助功能复选框。 我在应用程序的第一个条目中调用了方法GetGlobalData()->EnableAccessibilitySupport(TRUE);。 我在框架中调用了EnableActiveAccessibility();,也用于menubar(如果GetGlobalData()->IsAccessibilitySupport()true,则默认调用它)

但它失败了,如何启用它我需要一些帮助

【问题讨论】:

正如博文中提到的,有些东西是无法访问的。为什么有些东西无法访问我无法理解,通常的修复方法是 1- 选择另一组控件,或 2- 自己重写控件并使其可访问。大多数人选择#1。 如果可能的话,我更容易重写控件并使其可访问,CMFCMenuBar 是一个窗口,当您单击时[仅对其子级,***按钮] 可访问在按钮上,下拉菜单是另一个控件 CMFCPopupMenu 这是我不知道如何自定义它的控件? 【参考方案1】:

如果您查看 CMFCmenubar 及其相关“按钮”的派生,您会发现在基本级别的按钮是从 CObject 派生的。这就是编码 ui 不支持它们的原因。编码的 ui 看不到它们。我们的编码 ui 测试遇到了同样的问题。目前,如果您使用功能包中的类,则没有简单的解决方法。

【讨论】:

必须有一个解决方案,它们是虚拟按钮,但已经在真实控件中绘制[窗口] 它自己的菜单栏可以提供有关其按钮的数据[主菜单项文件、编辑、.. ..],但不是为他们的孩子[他们是 cmfcpopupmenu 录制的测试单击文件并显示子菜单但无法识别子菜单]

以上是关于如何在 CMFCMenuBar 及其项目中支持可访问性的主要内容,如果未能解决你的问题,请参考以下文章

帮助查找 CMFCMenuBar 上的工具提示问题

CMFCMenuBar 显示错误的工具提示

销毁 CMFCMenuBar 和 CMFCToolBar 并重新创建它们的正确方法是啥?

4 月最热门的 20 个前端开源项目

如何让 node 运行 es6 模块文件,及其原理

如何让 node 运行 es6 模块文件,及其原理