Я создал класс C # COM, который работает в собственном приложении Windows (MFC C ++). Класс COM используется для отображения видео на дескрипторе окна из основного приложения. Я использую взаимодействие .NET для доступа к DirectShow в моем приложении C #. После рендеринга графика я вижу всплывающее окно ActiveMovie, прежде чем оно будет правильно расположено в окне.
Вот пример того, как я настраиваю свой график. Я не включил весь код, но я думаю, что важная часть включена - рендеринг графика и установка владельца окна и положения.
_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