2012-05-14 47 views
0

有没有人有过关于如何为C++代码提供一个可用于DirectShow渲染的窗口的简单示例?在C++中通过DirectShow在C#UserControl中使用HWND的示例

我现在能够创建一个独立的,并通过WS_POPUP窗口渲染到一个窗口,并匹配它的大小/位置,我都保留在WPF控件视频窗格现有的控制窗口。

只要我努力使窗口的WPF控件的子集或WS_CHILD上一个新的或现有的窗口一切都停止渲染,我没有收到错误解释是怎么回事。

在理想情况下,我将能够通过对C++/DirectShow的类通过从C#现有HWND并使用它有原样。

P.S.

你问之前“为什么你不只是...做不同的事情”,我需要从C++控制DirectShow和具有显示经由C#(WPF)控制的结果。我无法控制这些情况。

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

+0

真的吗?没有?没有建议?基本上,一切工作,除非我尝试使用我没有手动创建的HWND,或者如果我将创建的HWND的父项设置为我不手动创建的HWND。 – kraz

回答

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);