建立新的無障礙物件

在此案例中,伺服器會建立新的可存取物件,以回應每個 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;
}