我有一个 CView,我想托管一个 DirectShow 渲染器。
我没有写原始代码,我只是清理并将代码移动到VS2005。这需要升级某些第三方工具,所以我试图在不完全了解 DX/DirectShow 的情况下稍微更改代码。
问题是我的应用程序在我运行时挂起
hr = gcap.pFg->QueryInterface(IID_IVideoWindow, (void **)&gcap.pVW);
[trimmed some code]
gcap.pVW->put_Owner((OAHWND) m_pDockWnd->GetSafeHwnd()); // We own the window now
m_pDockWnd 是 CView。我可以在预览模式下执行此操作,但不能在捕获模式下执行此操作。在捕获模式下,它会挂起应用程序。
如果我不拥有渲染窗口,则没有问题(尽管捕获窗口归桌面所有,这对我不起作用)。
此外,当捕获窗口归桌面所有时,它会显示一个忙碌的光标 - 可能它实际上也没有工作,但它至少没有挂起应用程序。挂起是指应用程序不响应用户输入,但后台线程继续运行。
更新:我们使用的是旧版本的 DirectX(06 年 8 月)。我编译/链接了与 Vista SDK 一起打包的 DirectShow 内容,并且....没有骰子。