Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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;
}