Создание объектов со специальными возможностями
В этом сценарии сервер создает новый доступный объект в ответ на каждый запрос 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;
}