Создание новых объектов со специальными возможностями
В этом сценарии сервер создает новый доступный объект в ответ на каждый запрос OBJID_CLIENT.
В следующем примере кода указатель на элемент управления извлекается из дополнительных данных окна. Этот дескриптор окон передается конструктору пользовательского объекта сервера специальных возможностей (AccServer). Этот объект создается при получении OBJID_CLIENT.
При создании объекта сервер получает ссылку, которая должна быть выпущена после вызова LresultFromObject, чтобы объект был уничтожен сразу после завершения работы клиента. Обратите внимание, что LresultFromObject увеличивает количество ссылок несколько раз, но это ответственность за клиентские приложения и среду выполнения Microsoft Active Accessibility, чтобы освободить эти ссылки.
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;
}