0

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

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

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

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

附言

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

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

4

1 回答 1

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); 
于 2012-05-23T07:18:41.670 回答