如何在参数中使用子 ID
本主题介绍用于解释从 IAccessible 方法返回的子 ID 的输入参数、输出参数和特殊情况。
输入参数
许多 Microsoft Active Accessibility 函数和大多数 IAccessible 属性都采用 VARIANT 结构作为输入参数。 对于大多数 IAccessible 属性,此参数允许客户端开发人员指定是需要有关对象本身的信息,还是有关对象的一个简单元素的信息。
Microsoft Active Accessibility 提供常 量CHILDID_SELF 来指示需要有关对象本身的信息。 若要获取有关简单元素的信息,客户端开发人员在 VARIANT 参数中指定其子 ID。
初始化 VARIANT 参数时,除了在 lVal 成员中指定子 ID 值 (或CHILDID_SELF) 外,请确保在 vt 成员中指定VT_I4。
例如,若要获取对象的名称而不是对象的子元素之一,请初始化 LVal 成员中的 IAccessible::get_accName ( CHILDID_SELF 的第一个参数的 VARIANT,并在 vt 成员) 中VT_I4,然后调用 IAccessible::get_accName。
输出参数
多个 IAccessible 函数和方法具有 VARIANT* 输出参数,其中包含子 ID 或指向子对象的 IDispatch 接口指针。 客户端必须执行不同的步骤,具体取决于客户端是接收 (简单元素) VT_I4子 ID,还是接收具有CHILDID_SELF (完整对象) 的 IDispatch 接口指针。 执行这些步骤将提供 一个 IAccessible 接口指针和子 ID,这些指针和子 ID 共同允许客户端使用 IAccessible 方法和属性。 这些步骤适用于 IAccessible::accHitTest、 get_accFocus 和 get_accSelection 方法。 它们也适用于 AccessibleObjectFromEvent、 AccessibleObjectFromPoint 和 AccessibleObjectFromWindow 客户端函数。
下表列出了可能返回的结果以及所需的后处理步骤,以便客户端具有 IAccessible 接口指针和子 ID。
返回的结果 | 返回值的后处理 |
---|---|
IDispatch 接口指针 | 这是一个完整的 对象。调用 QueryInterface 以访问 IAccessible 接口指针。 使用 IAccessible 接口指针 和CHILDID_SELF 来访问 IAccessible 方法和属性。 |
VT_I4子 ID | 使用子 ID 调用 IAccessible::get_accChild 以查看是否有 IDispatch 接口指针。如果获取 IDispatch 接口指针,请将其与 CHILDID_SELF 一起使用,以访问 IAccessible 接口方法和属性。 如果调用 get_accChild 失败,则表示有一个简单的元素。 使用原始 IAccessible 接口指针 (调用上述方法或函数时所用的指针) 调用返回 的VT_I4 子 ID。 |
在使用 VARIANT 参数之前,必须通过调用 variantInit 组件对象模型 (COM) 函数来初始化它。 完成结构后,调用 VariantClear 以释放为该 VARIANT 保留的内存。
特殊情况
上表中的准则存在例外情况,例如 IAccessible::accHitTest 方法返回子 ID 时。 如果子级是可访问对象,则服务器必须返回 IDispatch 接口。 如果 IAccessible::accHitTest 返回子 ID,则子元素为简单元素。
此外, accNavigate 还有一些特殊情况。 有关详细信息,请参阅 IAccessible::accNavigate 和 空间和逻辑导航。