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


Метод IResourceManager::SetFocus (strmif.h)

[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать в новом коде MediaPlayer, IMFMediaEngine и аудио/видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, в котором используются устаревшие API, чтобы по возможности использовать новые API.]

Метод SetFocus уведомляет диспетчер ресурсов о том, что указанный объект получил фокус пользователя.

Синтаксис

HRESULT SetFocus(
  [in] IUnknown *pFocusObject
);

Параметры

[in] pFocusObject

Указатель на объект, которому был предоставлен фокус пользователя.

Возвращаемое значение

Возвращает значение HRESULT , зависящее от реализации. HRESULT может быть одной из следующих стандартных констант или другими значениями, не указанными в списке.

Код возврата Описание
E_FAIL
Ошибка.
E_POINTER
Аргумент указателя NULL.
E_INVALIDARG
Недопустимый аргумент.
E_NOTIMPL
Метод не поддерживается.
S_OK или NOERROR
Успешно.

Комментарии

В DirectShow объект с фокусом пользователя обычно является отрисовщиком видео, окно которого получило фокус. Диспетчер ресурсов отдает приоритет запросам ресурсов в следующем порядке:

  1. Запросы, выполненные с объектом focus, указанным в параметре pFocusObject .
  2. Запросы, объект фокуса которых использует общий исходный фильтр.
  3. Запросы, для которых объект фокуса использует общий граф фильтра.
  4. Запросы выполняются в том же процессе, что и фокус.
После установки фокуса диспетчер ресурсов должен поддерживать объект фокуса до вызова ReleaseFocus . То есть после вызова этого метода необходимо использовать ReleaseFocus до того, как интерфейс IUnknown объекта фокуса станет недействительным, если вы не можете гарантировать, что SetFocus вызывается другим объектом в то же время. В объекте фокуса количество ссылок не удерживается.

Диспетчер ресурсов будет хранить этот указатель до тех пор, пока он не будет заменен или отменен, и будет использовать его для разрешения конфликтов ресурсов. Он будет использовать QueryInterface для интерфейса IBaseFilter по крайней мере и, если он будет найден, будет использовать методы для этого интерфейса. Он вызывает методы в IBaseFilter , чтобы решить, какой отрисовщик звука использовать, если их есть два (он выберет один с исходным фильтром, общим для объекта фокуса), а также для определения того, находятся ли два объекта в одном графе фильтра.

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header strmif.h (включая Dshow.h)
Библиотека Strmiids.lib

См. также раздел

Коды ошибок и успешности

Интерфейс IResourceManager