2012-05-14 48 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);