IAccessibleEx 实现指南
Microsoft UI 自动化核心可以检索服务器通过 IAccessible 接口公开的任何可访问对象的所有 Microsoft Active 辅助功能属性。 实现 IAccessibleEx 时,必须仅公开无法通过现有 Microsoft Active 辅助功能属性公开的 UI 功能的那些方面。 本主题标识UI 自动化属性和控件模式,这些模式表示在 Microsoft Active Accessibility 中没有对应项的 UI 功能,它们是可在 IAccessibleEx 实现中公开的属性和控件模式。
本主题包含以下各节:
属性
以下UI 自动化属性与 Microsoft Active Accessibility 功能不重叠。 可以在 IAccessibleEx 实现中使用它们:
- AriaProperties
- AriaRole
- AutomationId
- ClassName
- ClickablePoint
- ControllerFor
- 环境
- DescribedBy
- FlowTo
- FrameworkId
- IsContentElement
- IsControlElement
- IsDataValidForForm
- IsRequiredForForm
- ItemStatus
- ItemType
- LabeledBy
- LocalizedControlType
- 方向
尽管 AcceleratorKey 和 AccessKey UI 自动化属性确实与 accKeyboardShortcut Microsoft Active Accessibility 属性重叠,但你仍然可以在 IAccessibleEx 实现中使用它们,用于同时具有访问键和加速器的控件。 同样,ControlType UI 自动化属性与 Microsoft Active Accessibility accRole 属性重叠,但仍可以在 IAccessibleEx 实现中使用它来定义控件更具体的角色。
由于 Microsoft Active Accessibility 属性已涵盖以下UI 自动化元素属性,因此无需在 IAccessibleEx 实现中使用它们。
UI 自动化属性 | Microsoft Active Accessibility Equivalent |
---|---|
BoundingRectangle | accLocation |
HasKeyboardFocus | accState, STATE_SYSTEM_FOCUSED |
IsEnabled | accState, STATE_SYSTEM_UNAVAILABLE |
IsKeyboardFocusable | accState, STATE_SYSTEM_FOCUSABLE |
IsPassword | accState, STATE_SYSTEM_PROTECTED |
HelpText | accHelp |
名称 | accName |
NativeWindowHandle | WindowFromAccessibleObject |
IsOffscreen | accState,STATE_SYSTEM_INVISIBLE/STATE_SYSTEM_OFFSCREEN |
ProcessId | 由 UI 自动化 核心提供 |
对于任何不受支持的UI 自动化属性,IRawElementProviderSimple::GetPropertyValue 方法的实现应将 pRetVal 参数设置为VT_EMPTY,并返回S_OK。 返回 UIA_E_NOTSUPPORTED 可能会导致 MSAA 到 UIA 代理删除相应属性的默认映射。
控件模式
以下UI 自动化控件模式与 Microsoft Active Accessibility 功能不重叠。 可以在 IAccessibleEx 实现中使用它们:
- 靠接
- 展开/折叠
- 网格
- GridItem
- MultipleView
- RangeValue
- 滚动
- ScrollItem
- SynchronizedInput
- 表
- TableItem
- 转换
对于 RangeValue 和转换控件模式,某些方法在UI 自动化控件模式和 Microsoft Active 辅助功能方法之间重叠。 在这些情况下,必须实现这两者。 例如,必须同时实现 Microsoft Active Accessibility 的 IAccessible::get_accValue 和 IAccessible::p ut_accValue 方法,UI 自动化IRangeValueProvider::Value 和 IRangeValueProvider::SetValue 方法也必须实现。 在内部,实现可以共享这些代码。 实现这两个集的要求可避免部分实现模式接口,同时保留现有 Microsoft Active 辅助功能客户端可用的 IAccessible 接口。
当控件具有下面概述的角色之一时,不需要以下UI 自动化控件模式;否则,如果相关,则应显式支持它们。
UI 自动化控件模式 | Microsoft 活动辅助功能角色 |
---|---|
InvokePattern | ROLE_SYSTEM_PUSHBUTTON、 ROLE_SYSTEM_MENUITEM、 ROLE_SYSTEM_BUTTONDROPDOWN、 ROLE_SYSTEM_SPLITBUTTON,以及 accDefaultAction 属性的值不是 NULL 的任何其他角色。 |
SelectionItemPattern | ROLE_SYSTEM_LISTITEM、 ROLE_SYSTEM_RADIOBUTTON |
SelectionPattern | ROLE_SYSTEM_LIST |
TogglePattern | ROLE_SYSTEM_CHECKBUTTON |
ValuePattern | 当它不是只读) 、ROLE_SYSTEM_PROGRESSBAR、ROLE_SYSTEM_COMBOBOX,当 accValue 属性的值不为 NULL 时,ROLE_SYSTEM_TEXT (。 |
WindowPattern | 在顶级 Microsoft Win32 HWND 上自动受支持。 |
用于UI 自动化属性更改事件的 WinEvents
除了为 IAccessible 定义的事件之外,还定义了以下事件标识符,并且可以与 IAccessibleEx 实现一起使用,作为相应UI 自动化属性的属性更改事件。 它们使用与为 IAccessible 定义的事件相同的机制。 有关详细信息,请参阅 WinEvents。
对于上面列出EVENT_OBJECT_值的事件,除了列出的已更改事件外, IAccessibleEx 实现还应触发此事件。 这使现有的 IAccessibleEx 客户端代码能够继续工作,同时将更精细的事件信息传达给感兴趣的客户端。
相关主题