我正在使用我的directshow应用程序作为进程库。 但是现在我需要将它作为单独的后台进程运行。 因此渲染表面在另一个进程上。 我将渲染表面(图片框)的句柄(hwnd)传递给后台进程。DirectShow自动调整大小
以前我有这个调整大小; (因为它是在同一过程中,我有机会直接控制)
...
m_VideoControl.Resize += new EventHandler(VideoControl_Resize);
...
private void VideoControl_Resize(object sender, EventArgs e)
{
lock (m_csAsyncLock)
{
ResizeVideoWindow();
}
}
protected virtual void ResizeVideoWindow()
{
if (m_VideoWindow != null && m_VideoControl != null)
{
m_VideoWindow.SetWindowPosition(0, 0, m_VideoControl.Width, m_VideoControl.Height);
}
}
但是现在我没有获得直接控制,所以我不能订阅VideoControl_Resize事件。 我只有控件的句柄。
如果外部控制调整大小,我该如何让视频重新调整大小?
如果可能的话,我不想SetWindowPosition函数之前使用新的过滤器,并解决它怎么样?
嗨罗马,我设法得到当前的大小; RECT rec = new RECT(); GetWindowRect(m_VideoControlHandle,ref rec); m_VideoWindow.SetWindowPosition(0,0,rec.Right - rec.Left,rec.Bottom - rec.Top);如何在不使用过滤器的情况下在每个示例呈现中调用此方法? – AFgone
让视频渲染器和托管UI在不同的进程中,你必须照顾进程间通信。也就是说,它并不是完全过滤,而是关于如何构建应用程序和UI处理程序。 –
我有另一个(实际上是一些更多)示例应用程序,它是由其他人编写的并且是封闭源代码。但是我们知道它不使用任何类型的IPC,但它可以只使用hwnd自动调整视频窗口大小。设置计时器并不断查询GetWindowRect并调用SetWindowPosition是否不合适? – AFgone