2017-02-22 31 views
0

Я разрабатываю приложение для веб-камеры и хочу повторно использовать то, что выглядит стандартным диалоговым окном для элементов управления камерой (те, которые настраивают параметры веб-камеры, такие как яркость, масштабирование, мерцание компенсация и т. д.). После некоторого копания я определил, что необходимые ресурсы диалога находятся в vfwwdm32.dll, диалоговое окно ID s is 10210 и 405. Да, это DLL, которая для древних видео для Windows около 1992Диалоговое окно «Управление камерой» от vfwwdm32.dll

Диалоговых ресурсы доступны через DirectShow, как описано в этом MSDN article, используя интерфейс, предоставляемый IAMVfwCaptureDialogs.


Вопрос № 1:
Собираюсь ли я об этом не так? Если в Windows есть еще одна (более современная) реализация этих диалоговых окон, которые я должен использовать?
Я бы хотел избежать повторной реализации этих методов с использованием «предпочтительного» метода построения моего собственного графического интерфейса, запросив доступные элементы управления непосредственно из WDM и вместо этого просто использовать диалоговые окна, которые уже созданы MS Тем более, что они удовлетворяют мои потребности довольно хорошо.


Вопрос № 2 (главный):
Учитывая, что мое приложение не DirectShow основанных (это MS Media Foundation основанного) Я хотел бы, чтобы не зависеть от DirectShow наследия. Это означает, что я использую метод, описанный в Displaying a dialog resource from..., который в основном сводится к LoadLibrary() ->FindResource() ->LoadResource() ->LockResource() ->CreateDialogIndirectParam().

Проблема, с которой я сталкиваюсь, заключается в том, что диалоговое окно должно знать , какая камера для управления. Это, по-видимому, осуществляется через входной параметр в диалоговое окно (я использую этот термин свободно, так как это не функция, а обмен данными диалога ).

Как предоставить необходимую информацию в диалоговом окне, чтобы она могла правильно работать с камерой по моему выбору?

В целом: Как реализовать обмен данными с этим диалоговым окном?

+1

Выполнение метода 'CreateDialogIndirect()' все равно потребует, чтобы вы сами заработали диалоговую логику; вы будете нести ответственность за всю логику этого диалога, если только диалоговая процедура не экспортируется. – andlabs

+0

Итак, маршрут 'IAMVfwCaptureDialogs' через * DirectShow * является единственным способом? :( – YePhIcK

+0

Поскольку вы имеете дело со старой технологией [Video For Windows] (https://msdn.microsoft.com/en-us/library/dd757708.aspx), вы можете искать API 'AVICap' ([ 'capCreateCaptureWindow()'] (https://msdn.microsoft.com/en-us/library/dd756879.aspx), ['capDlgVideoFormat()'] (https://msdn.microsoft.com/en-us/ библиотека/dd756882.aspx), ['capDlgVideoDisplay()'] (https://msdn.microsoft.com/en-us/library/dd756881.aspx) и т. д.). См. [Отображение диалоговых окон для установки характеристик видео] (https://msdn.microsoft.com/en-us/library/dd797890.aspx) –

ответ

1

Вы не должны повторно использовать диалоговые окна - вы должны использовать их только с помощью API.

Тогда, если ваш основной API для обработки видеозахвата - это Media Foundation, тогда этот интерфейс просто неприменим. Пользовательский интерфейс принадлежит видео для Windows, и вы также можете его использовать - в ограниченном объеме - от DirectShow, когда вы снимаете видео в DirectShow, используя устаревший фильтр захвата VFW.

Media Foundation может использовать одно и то же оборудование, но он разговаривает с ним на более низком уровне, а диалоговые окна VFW не применяются.

Предполагается предоставить свой собственный пользовательский интерфейс, который связывается с устройством с использованием интерфейсов Media Foundation.И нет абсолютно никакой причины, по которой вы хотели бы использовать диалоговые шаблоны из VFW DLL.

+0

Что делает «этот пользовательский интерфейс просто неприменим», если я имею дело с MF? Управление камерой - это управление камерой. Откройте любое приложение (Skype, Debut, AmCap ...) - они ** все ** запустите это диалоговое окно. На самом деле я еще не нашел приложение для веб-камеры, которое * НЕ делает это. Не могли бы вы рассказать о своем утверждении? Имейте в виду, что меня интересует только один диалог из 3 предоставленных - другие 2 действительно применимы только к VFW по дизайну, поскольку они касаются настроек формата H/W и формата видеозахвата. – YePhIcK

+1

В частности, свойство свойства управления камерой может работать с источником Media Foundation, если вы [запрос 'IAMCameraControl'] (http://blogs.microsoft.co.il/pavely/2012/05/19/windows-media-foundation-controlling- свойства камеры /) и отобразить стандартный диалоговый интерфейс фрейма свойств COM/OLE API ['OleCreatePropertyFrame'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms678437) с CLSID' {71F96465 -78F3-11D0-A18C-00A0C9118956} 'AKA' CLSID_CameraControlPropertyPage'. Это может работать, но помните, что это недокументированное сочетание API. –

+0

Это действительно интересная идея. Чувствует себя очень хаки, хотя, TBH. – YePhIcK