0
我已經構建了一個在本地Windows應用程序(MFC C++)中運行的C#COM類。 COM類用於在主應用程序的窗口句柄上顯示視頻。我使用.NET interop在我的C#應用程序中訪問DirectShow。在渲染圖形之後,我看到ActiveMovie窗口在它正確定位到窗口之前彈出。播放視頻文件時彈出DirectShow視頻窗口
下面是我如何設置圖形的示例。我沒有包括所有的代碼,但我認爲重要的部分包括在內 - 呈現圖表並設置窗口的所有者和位置。
_graphBuilder = (IGraphBuilder)new FilgraphManager();
_sourceFilter = (IBaseFilter)Activator.CreateInstance(Type.GetTypeFromCLSID(CLSID.AsyncReader));
hr = ((IFileSourceFilter)_sourceFilter).Load(fileName, null);
DSUtilities.ThrowExceptionForHR(hr);
hr = _graphBuilder.AddFilter(_sourceFilter, "AsyncReader");
DSUtilities.ThrowExceptionForHR(hr);
IPin output = DSUtilities.FindPinByDirection(_sourceFilter, _PinDirection.PINDIR_OUTPUT, 0);
// add some other filters
// ...
_graphBuilder.Render(output);
_videoWindow = (IVideoWindow)_graphBuilder;
_videoWindow.WindowStyle = (int)(WindowStyle.Child | WindowStyle.ClipChildren);
_videoWindow.SetWindowPosition(_viewer.VideoRectangle.Left, _viewer.VideoRectangle.Top, _viewer.VideoRectangle.Width, _viewer.VideoRectangle.Height);
_videoWindow.Owner = viewer.CanvasHandle.ToInt32();
我相信這個問題與_graphBuilder.Render()調用或設置窗口的所有者和窗口位置有關。我弄亂了函數調用的順序,似乎沒有任何幫助。需要注意的一點是,在IGraphBuilder上調用Render()之後,您將無法獲取IVideoWindow接口。我需要擺脫彈出!有其他人看過這個問題嗎?或者有沒有人有什麼想法是什麼造成的?任何幫助將不勝感激。
感謝, 丹