Creare nuovi oggetti accessibili

In questo scenario, il server crea un nuovo oggetto accessibile in risposta a ogni richiesta di OBJID_CLIENT .

Nel codice di esempio seguente viene recuperato un puntatore al controllo dai dati della finestra aggiuntivi. Questo e l'handle della finestra vengono passati al costruttore dell'oggetto AccServer (Custom Accessibility Server). Questo oggetto viene creato ogni volta che viene ricevuto OBJID_CLIENT .

Quando l'oggetto viene creato, il server ottiene un riferimento, che deve essere rilasciato dopo aver chiamato LresultFromObject, in modo che l'oggetto venga eliminato non appena il client viene completato. Si noti che LresultFromObject incrementa il conteggio dei riferimenti più volte, ma è responsabilità delle applicazioni client e del runtime di accessibilità Microsoft Active, per rilasciare questi riferimenti.

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;
}