首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有directshow视频渲染器的移动面板

带有directshow视频渲染器的移动面板
EN

Stack Overflow用户
提问于 2011-03-17 23:38:29
回答 2查看 1.9K关注 0票数 2

我有几个面板与不同的directshow标题句柄绑定,以便视频在面板中显示(WindowStyle属性是:WindowStyle,ClipSiblings,ClipChildren,Caption)现在我想移动这些面板,但我只能在视频内容没有填满整个面板并且我是空白面板空间上的clicking+holding鼠标按键时才能移动它们。我可以在面板中移动视频窗口,但它们当然只能在各自的面板空间内移动。

有没有办法将视频窗口的内容直接绑定到面板上,例如,当我click+hold视频窗口菜单栏时,整个带有内容的面板可以自由移动?

提前谢谢。

忘了提一下,这是用c#编写的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-31 16:19:41

我终于解决了这个问题,我真不敢相信我有多傻。我省略了

hr = videoWindow.put_MessageDrain(hWin.Handle);

行,视频窗口当然不会“监听”面板。

票数 2
EN

Stack Overflow用户

发布于 2011-03-19 06:04:49

我使用视频混合渲染器9,并将其绑定到一个用户控件。我已经将VMR9设置为无窗口模式,然后将IVMRWindowlessControl9界面上的视频剪辑窗口设置为用户控件的句柄。我还使用I Control9.GetNativeVideoSize、I Control9.SetAspectRatioMode和I Control9.SetVideoPosition将视频设置为完全填充面板。当包含我的用户控件的窗体移动时,视频就会跟着移动。这一切都是通过C#和DirectShow.NET完成的。

编辑后添加示例代码:

代码语言:javascript
复制
public partial class VideoPanel : UserControl
{
    private VideoMixingRenderer9 _renderer;
    private IVMRWindowlessControl9 _windowlessControl;

    public VideoMixingRenderer9 Renderer
    {
        get
        {
            return _renderer;
        }
        set
        {
            _renderer = value;
            if (_renderer != null)
            {
                var filterConfig = _renderer as IVMRFilterConfig9;
                if (filterConfig != null)
                {
                    filterConfig.SetRenderingMode(VMR9Mode.Windowless);
                    _windowlessControl = _renderer as IVMRWindowlessControl9;
                    if (_windowlessControl != null)
                    {
                        _windowlessControl.SetVideoClippingWindow(Handle);
                        SetSize();
                    }
                }
            }
        }
    }

    private void SetSize()
    {
        var srcRect = new DsRect();
        var dstRect = new DsRect(ClientRectangle);
        int arWidth, arHeight;
        _windowlessControl.GetNativeVideoSize(out srcRect.right, out srcRect.bottom, out arWidth, out arHeight);
        _windowlessControl.SetAspectRatioMode(VMR9AspectRatioMode.LetterBox);
        _windowlessControl.SetVideoPosition(srcRect, dstRect);
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5341379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档