我正在开发一个网络摄像头应用程序,并希望重新使用看似标准的相机控件对话框(那些配置网络摄像头设置的对话框,如亮度、缩放、闪烁补偿等)。经过一番挖掘,我发现必要的对话框资源位于vfwwdm32.dll中,对话框ID为102
和405
。是的,这是一个用于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()
。
我遇到的问题是对话框需要知道要控制哪个相机。这大概是通过对话框的输入参数来完成的(我使用这个术语是松散的,因为它不是一个真正的函数,而是一个对话框数据交换过程)。
如何向对话框提供必要的信息,以使其与我选择的相机正常工作?
更一般地说:如何与该对话框实现数据交换?