Tworzenie nowych obiektów z ułatwieniami dostępu
W tym scenariuszu serwer tworzy nowy obiekt dostępny w odpowiedzi na każde żądanie OBJID_CLIENT.
W poniższym przykładowym kodzie wskaźnik do kontrolki jest pobierany z dodatkowych danych okna. To i uchwyt okna są przekazywane do konstruktora obiektu niestandardowego serwera ułatwień dostępu (AccServer). Ten obiekt jest tworzony za każdym razem, gdy OBJID_CLIENT zostanie odebrany.
Po utworzeniu obiektu serwer uzyskuje odwołanie, które należy zwolnić po wywołaniu LresultFromObject, aby obiekt został zniszczony zaraz po zakończeniu pracy klienta. Należy pamiętać, że LresultFromObject zwiększa liczbę odwołań kilka razy, ale jest to odpowiedzialność za aplikacje klienckie i środowisko uruchomieniowe Microsoft Active Accessibility w celu wydania tych odwołań.
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;
}