IAccessible::accDoDefaultAction 方法 (oleacc.h)

IAccessible::accDoDefaultAction 方法执行指定对象的默认操作。 并非所有对象都有默认操作。

语法

HRESULT accDoDefaultAction(
  [in] VARIANT varChild
);

parameters

[in] varChild

类型: VARIANT

指定默认操作是属于 对象还是对象的子元素之一。 有关初始化 VARIANT 的详细信息,请参阅 如何在参数中使用子 ID

返回值

类型: HRESULT

如果成功,则返回 S_OK。

如果未成功,则返回下表中的值之一或其他标准 COM 错误代码

错误 说明
DISP_E_MEMBERNOTFOUND
对象不支持 方法。 为不执行操作的控件(如编辑字段)返回此值。
E_INVALIDARG
自变量无效。

注解

客户端通过调用 IAccessible::get_accDefaultAction 检索描述对象的默认操作的字符串。

客户端开发人员注意: 在标准系统菜单中的菜单项上使用时, accDoDefaultAction 将返回S_OK,但如果访问键中使用的字符 (菜单项名称的文本中带下划线字符(也称为助记键) )?, !, @,或任何其他需要 SHIFT 键或其他修饰键的字符,则无法执行该操作。 这同样发生在具有访问键字符(需要按下 ALT GR 键)的国际键盘上。 对于其他应用程序(如 Microsoft Office 或 Windows Internet Explorer)中的菜单,这不是问题。 有关访问密钥的详细信息,请参阅 IAccessible::get_accKeyboardShortcut

此外,虽然 accDoDefaultAction 应该立即返回,但某些实现会阻止返回。 例如,如果单击链接显示对话框,则某些实现将阻止返回,直到对话框被关闭。 此类延迟可能会阻止客户端应用程序处理对话框。 服务器应避免阻止返回的实现。

服务器示例

以下示例演示自定义列表控件的可能实现,该控件的默认操作是双击子项。 为了防止阻塞, 方法会发布一条自定义消息,当控件窗口收到该消息时,会触发操作,例如显示项属性。

// Assume a previous definition such as this: 
// #define CUSTOMLB_DEFERDOUBLECLICK   (WM_USER + 1) 

HRESULT STDMETHODCALLTYPE AccServer::accDoDefaultAction( 
    VARIANT varChild) 
{
    if (varChild.vt != VT_I4)
    {
        return E_INVALIDARG;
    }
    if (varChild.lVal != CHILDID_SELF)
    {
        // It is assumed that the control does its own checking to see which 
        // item has the focus when it receives this message.
        PostMessage(m_hwnd, CUSTOMLB_DEFERDOUBLECLICK, 0, 0);
    }
    return S_OK;
};

客户端示例

以下示例函数对 控件执行默认操作。

HRESULT DoAction(IAccessible* pAcc)
{
        VARIANT varId;
        varId.vt = VT_I4;
        varId.lVal = CHILDID_SELF;
        return pAcc->accDoDefaultAction(varId);
}

要求

   
最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 oleacc.h
Library Oleacc.lib
DLL Oleacc.dll
可再发行组件 Windows NT Server 4.0 SP6 及更高版本和 Windows 95 上的 Active Accessibility 1.3 RDK

请参阅

附录 A:支持的用户界面元素参考

DefaultAction 属性

IAccessible

IAccessible::get_accDefaultAction

IAccessible::get_accKeyboardShortcut

VARIANT