私は自分のdirectshowアプリをインプロセスライブラリとして使用していました。 しかし今は別のバックグラウンドプロセスとして実行する必要があります。 レンダリングサーフェスは別のプロセスにあります。 レンダリングサーフェイス(ピクチャボックス)のハンドル(hwnd)をバックグラウンドプロセスに渡しています。DirectShow Auto Resize
以前はサイズを変更していましたが、私はVideoControl_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);
}
}
(それは同じプロセスにあったと私は直接コントロールへのアクセス権を持っているので)。 私はコントロールのハンドルしか持っていません。
外部コントロールのサイズを変更すると、ビデオのサイズを変更するにはどうすればよいですか?
可能であれば、私は新しいフィルタを使い、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ハンドラの構造についてです。 –
私は別の(実際には2つ以上の)サンプルアプリケーションを持っています。これは誰かが書いたもので、クローズドソースです。しかし、IPCを使用していないことがわかっていますが、hwndだけでビデオウィンドウのサイズを自動的に変更することができます。タイマーを設定しGetWindowRectを常にクエリしてSetWindowPositionを呼び出すことは悪い考えですか? – AFgone