创建新的可访问对象

在此方案中,服务器会创建一个新的可访问对象,以响应每个 OBJID_CLIENT 请求。

在以下示例代码中,从额外的窗口数据中检索指向 控件的指针。 此句柄和窗口句柄传递到自定义辅助功能服务器的构造函数 (AccServer) 对象。 每当收到 OBJID_CLIENT 时,将创建此对象。

创建对象时,服务器将获取一个引用,该引用必须在调用 LresultFromObject 后释放,以便在客户端完成该对象后立即销毁该对象。 请注意, LresultFromObject 会多次递增引用计数,但客户端应用程序和 Microsoft Active Accessibility 运行时负责发布这些引用。

case WM_GETOBJECT:
{
    // Return the IAccessible object. 
    if ((DWORD)lParam == OBJID_CLIENT)
    {
        // Get the control.  
        CustomListControl* pCustomList = (CustomListControl*)(LONG_PTR)GetWindowLongPtr(hwnd, 0);
        AccServer* pAccServer = new AccServer(hwnd, pCustomList);
        if (pAccServer != NULL)  // NULL if out of memory. 
        {
            LRESULT Lresult = LresultFromObject(IID_IAccessible, wParam, pAccServer);
            pAccServer->Release();
            return Lresult;
        }
        else return 0;
    }
    break;
}