Поделиться через


Создание объектов со специальными возможностями

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