在C ++中通过DirectShow使用C#UserControl中的HWND的示例

时间:2012-05-14 20:35:20

标签: c# c++ directshow command-line-interface

有没有人有关于如何为C ++代码提供一个可用于从C#UserControl进行DirectShow渲染的窗口的简单示例?

我目前能够通过WS_POPUP窗口创建一个单独的渲染窗口,并将其大小/位置与我为WPF控件上的视频窗格保留的现有控制窗口相匹配。

一旦我尝试使窗口成为WPF控件的子窗口或在新窗口或现有窗口上设置WS_CHILD,一切都会停止渲染,并且我没有收到任何错误来解释正在发生的事情。

理想情况下,我可以将现有的HWND从C#传递到C ++ / DirectShow类,并按原样使用它。

P.S。

在你问“你为什么不......做不同的事情”之前,我需要从C ++控制DirectShow并且必须通过C#(WPF)控件显示结果。我无法控制这些条件。

C#/ WPF(控制保留)< ---> C ++ / CLI< ---> C ++ / HWND / DirectShow的

1 个答案:

答案 0 :(得分:0)

实现这一目标的最佳方法是在无窗口模式下使用VMR。下面的代码片段说明了这一点(这是为了工作代码。我已经删除了错误检查等但是应该给你一个想法):

    pVMRConfig->SetRenderingMode(VMRMode_Windowless);
    m_VMR->QueryInterface(IID_IVMRWindowlessControl9, (void**)&pVMRWindowlessControl);

    //displayWnd is what you pass in from your C# app
    pVMRWindowlessControl->SetVideoClippingWindow(displayWnd); 
    RECT rcDest;
    GetClientRect(displayWnd, &rcDest); 
    hr = pVMRWindowlessControl->SetVideoPosition(NULL, &rcDest);