내 DirectShow 앱을 진행중인 라이브러리로 사용하고있었습니다. 그러나 지금은 별도의 백그라운드 프로세스로 실행해야합니다. 그래서 렌더링 표면이 다른 프로세스에 있습니다. 렌더 표면 (그림 상자)의 핸들 (hwnd)을 백그라운드 프로세스에 전달하고 있습니다.DirectShow Auto Resize
이전에는 크기 조정을했습니다. (이 같은 프로세스에 있었고, 내가 직접 컨트롤에 액세스 할 수 있기 때문에)
...
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