Отображение диалоговых окон захвата VFW
[Функция, связанная с этой страницей DirectShow, является устаревшей функцией. Он был заменен MediaPlayer, IMFMediaEngine, и аудио/ видео захвата в Media Foundation. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует, чтобы новый код использовал MediaPlayer, IMFMediaEngine и аудио- и видеозахват в Media Foundation вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает переписать существующий код, использующий устаревшие API, чтобы по возможности использовать новые API.]
Устройство захвата, которое по-прежнему использует драйвер Видео для Windows (VFW), может поддерживать любое из следующих трех диалоговых окон, которые используются для настройки устройства.
. | Описание |
---|---|
Источник видео | Используется для выбора видеовхода и настройки параметров устройства, таких как яркость или контрастность изображения. |
Формат видео | Используется для выбора размеров изображения и битовой глубины. |
Видеотрансляции | Используется для управления внешним видом отображаемого видео. |
Чтобы отобразить одно из этих диалоговых окон, выполните следующие действия.
- Остановите граф фильтров.
- Запросите фильтр записи для интерфейса IAMVfwCaptureDialogs . Если QueryInterface завершается успешно, это означает, что устройство захвата является устройством VFW.
- Вызовите IAMVfwCaptureDialogs::HasDialog, чтобы проверка, поддерживает ли драйвер диалоговое окно, которое требуется отобразить. Перечисление VfwCaptureDialogs определяет флаги для каждого из диалоговых окон VFW. HasDialog возвращает S_OK, если диалоговое окно поддерживается. В противном случае он возвращает S_FALSE, поэтому проверка для значения S_OK напрямую, а не с помощью макроса SUCCEEDED.
- Если диалоговое окно поддерживается, вызовите IAMVfwCaptureDialogs::ShowDialog для отображения диалогового окна.
- Перезапустите граф.
В следующем коде показаны следующие шаги для диалогового окна Источник видео:
pControl->Stop(); // Stop the graph.
// Query the capture filter for the IAMVfwCaptureDialogs interface.
IAMVfwCaptureDialogs *pVfw = 0;
hr = pCap->QueryInterface(IID_IAMVfwCaptureDialogs, (void**)&pVfw);
if (SUCCEEDED(hr))
{
// Check if the device supports this dialog box.
if (S_OK == pVfw->HasDialog(VfwCaptureDialog_Source))
{
// Show the dialog box.
hr = pVfw->ShowDialog(VfwCaptureDialog_Source, hwndParent);
}
}
pControl->Run();
Связанные темы