0

我正在开发一个网络摄像头应用程序,并希望重新使用看似标准的相机控件对话框(那些配置网络摄像头设置的对话框,如亮度、缩放、闪烁补偿等)。经过一番挖掘,我发现必要的对话框资源位于vfwwdm32.dll中,对话框ID102405。是的,这是一个用于1992 年左右的古老Video For Windows的 DLL。

对话资源可通过DirectShow访问,如本MSDN 文章中所述,使用IAMVfwCaptureDialogs提供的接口。


问题#1:
我是不是走错了路?如果我应该使用 Windows 中可用的这些对话框的另一个(更现代)实现?
我想通过从WDM本身查询可用控件来避免使用构建我自己的 GUI 的“首选”方法来重新实现这些,而只使用 MS 已经构建的对话框。特别是因为它们非常适合我的需求。


问题 #2(主要问题):
鉴于我的应用程序不是基于DirectShow的(它是基于MS Media Foundation的),我不想依赖DirectShow遗留。这意味着我使用Displaying a dialog resource from...中描述的方法,基本上归结为LoadLibrary()-> FindResource()-> LoadResource()-> LockResource()-> CreateDialogIndirectParam()

我遇到的问题是对话框需要知道要控制哪个相机。这大概是通过对话框的输入参数来完成的(我使用这个术语是松散的,因为它不是一个真正的函数,而是一个对话框数据交换过程)。

如何向对话框提供必要的信息,以使其与我选择的相机正常工作?

更一般地说:如何与该对话框实现数据交换?

4

1 回答 1

1

您不应该重复使用对话框 - 您只应该使用 API 使用它们。

那么如果你处理视频捕获硬件的主要 API 是 Media Foundation,那么这个 UI 根本不适用。UI 属于 Video for Windows,当您使用旧版 VFW 捕获过滤器在 DirectShow 中捕获视频时,您也可以在有限的范围内从 DirectShow 使用它。

Media Foundation 可以使用相同的硬件,但它在较低级别点与其对话,并且 VFW 对话不适用。

您应该提供自己的 UI,它使用 Media Foundation 接口与设备通信。绝对没有理由要使用 VFW DLL 中的对话框模板。

于 2017-02-22T23:05:56.840 回答