Condividi tramite


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 aggiuntivi della finestra. Questo e l'handle di finestra vengono passati al costruttore dell'oggetto AccServer (Accessibility Server) personalizzato. Questo oggetto viene creato ogni volta che viene ricevuto OBJID_CLIENT.

Quando viene creato l'oggetto, il server ottiene un riferimento, che deve essere rilasciato dopo aver chiamato LresultFromObject, in modo che l'oggetto venga eliminato definitivamente non appena il client viene terminato con esso. Si noti che LresultFromObject incrementa il conteggio dei riferimenti più volte, ma è responsabilità delle applicazioni client e del runtime di Microsoft Active Accessibility 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;
}