Я построил класс C# COM, который работает в приложении для родных окон (MFC C++). Класс COM используется для отображения видео на дескрипторе окна из основного приложения. Я использую .NET interop для доступа к DirectShow в моем приложении C#. После того, как я создаю график, я вижу, что окно 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() или настройки владельца окна и окна позиции. Я перепутал с порядком вызовов функций, и ничего не помогает. Важно отметить, что вы не можете захватить интерфейс IVideoWindow до тех пор, пока вы не вызовете Render() на IGraphBuilder. Мне нужно избавиться от всплывающих окон! Кто-нибудь еще видел эту проблему? Или у кого-нибудь есть идеи о том, что вызывает это? Любая помощь будет оценена.
Спасибо, Dan