新しいアクセシビリティ対応オブジェクトを作成する

このシナリオでは、サーバーは各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;
}