如何在 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 及其项目中支持可访问性的主要内容,如果未能解决你的问题,请参考以下文章