微软官网有说明
https://docs.microsoft.com/en-us/windows/win32/api/control/nn-control-ivideowindow
IVideoWindow 接口(control.h)
IVideoWindow 接口设置视频窗口的属性。应用程序可以使用它来设置窗口所有者、窗口的位置和尺寸以及其他属性。
注意 IVMRWindowlessControl 或 IVMRWindowlessControl9 接口现在优先于 IVideoWindow。有关详细信息,请参阅使用无窗口模式。
Video Renderer 过滤器和 Filter Graph Manager 都公开了这个接口。Filter Graph Manager 将所有方法调用转发到 Video Renderer。它还转发视频渲染器需要接收的某些窗口消息,例如 WM_DISPLAYCHANGE。因为视频窗口通常是应用程序窗口的子窗口,所以过滤器不会收到这些消息。因此,它依赖于 Filter Graph Manager 来转发它们。在大多数情况下,由于刚刚描述的消息传递问题,应用程序应该查询过滤器图形管理器以获得此接口,而不是直接调用过滤器。但是,如果过滤器图具有多个 Video Renderer,则过滤器图管理器仅与其中一个通信,可任意选择。因此,如果您的应用程序使用多个视频窗口,直接在过滤器上使用 IVideoWindow 接口。在这种情况下,您必须使用 IVideoWindow::NotifyOwnerMessage 方法将窗口消息转发到每个 Video Renderer 实例。
示例代码如下
https://cpp.hotexamples.com/examples/-/IVideoWindow/-/cpp-ivideowindow-class-examples.html
HRESULT
recChannel_t::unmap(void)
{
__CONTEXT("recChannel_t::unmap");
IBaseFilter *pFilter = NULL;
int hr = 0;
hr = pGraph->FindFilterByName(L"Video Renderer", &pFilter);
if (!hr)
{
IVideoWindow *pWindowInfo = NULL;
hr = pFilter->QueryInterface(IID_IVideoWindow, (void **)&pWindowInfo);
errorCheck(hr);
pWindowInfo->put_Visible(OAFALSE);
pWindowInfo->put_AutoShow(OAFALSE);
pWindowInfo->Release();
}
pControl->StopWhenReady();
#ifdef _WINDOWS
if (fControl)
{
fControl->CWnd::ShowWindow(SW_HIDE);
}
#endif
mapping = false;
return 0;
}