Delen via


Bestaande aanwijzers opnieuw gebruiken voor objecten

In dit scenario reageert de server op een OBJID_CLIENT aanvraag met behulp van dezelfde IAccessible interfaceaanwijzer.

In de volgende voorbeeldcode wordt het besturingselementobject opgehaald uit de extra venstergegevens en wordt een methode van het besturingselement aangeroepen om het object van de toegankelijkheidsserver (de toepassings gedefinieerde AccServer-klasse) op te halen, indien van toepassing. Als de toegankelijkheidsserver nog niet bestaat, wordt deze gemaakt.

Wanneer het object van de toegankelijkheidsserver wordt gemaakt, heeft het een referentieaantal van 1. LresultFromObject het aantal verwijzingen meerdere keren verhogen, maar deze verwijzingen worden vrijgegeven wanneer de client klaar is met het object. De server publiceert de verwijzing wanneer het besturingsvenster wordt vernietigd.

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

    
case WM_DESTROY:
    {
    CustomListControl* pCustomList = (CustomListControl*)(LONG_PTR)GetWindowLongPtr(hwnd, 0);
    AccServer* pAccServer = pCustomList->GetAccServer();
    if (pAccServer!= NULL)
    {
        // Notify the accessibility object that the control no longer exists. 
        pAccServer->SetControlIsAlive(false);
        // Release the reference created in WM_GETOBJECT. 
        pAccServer->Release(); 
    }   
    // Destroy the control. 
    delete pCustomList;
     break;
    }