0

DirectShow を使用してビデオを表示するコントロール、VideoControl があります。これは、IVideoWindow の所有者として設定されています。別のコントロール、AreaControl があります。これは、ビデオ コントロールの上に破線の四角形を表示することになっています。AreaControl は SetStyle(ControlStyles.SupportsTransparentBackColor, true) を使用して透明に設定されます。AreaControl を他のコントロールの上に配置すると、期待どおりに機能し、その背後にあるコントロールの上に破線の四角形が表示されます。しかし、破線の長方形コントロールをビデオ コントロールの上に配置すると、AreaControl は VideoControl の BackColor で埋められます。

破線の長方形がオーバーレイされた状態で、AreaControl を介してビデオを表示するにはどうすればよいですか? BackColor を描画するだけでなく、VideoControl にビデオを描画させる方法はありますか?

4

2 に答える 2

1

私の知る限り、やりたいことを直接行う方法はありません。問題は、コントロールの透明なスタイルの実装です。このスタイル属性を持つコントロールは、基本的に描画するだけで、その背後にあるものが透明に見えます。(実際には、まったく透明ではありません)。

私の頭に浮かぶ唯一の解決策は、ウィンドウ (フォーム) を使用して、その中にコントロールを配置することです。Opacity プロパティを 1.0 未満に設定すると、フォームを透明にすることができます。0.0 の値は完全に透明になります (読み取り: 非表示)。破線の境界線は完全に黒くする必要があります。不透明度 fe 0.4 ではグレーに見えます。

または、フォームの TransparencyKey プロパティで運が良いかもしれません。これを白に設定すると、望ましい効果が得られる可能性がありますが、これはテストしていません。

どちらの場合も、フォームは完全にボーダーレスでなければなりません。ビデオ フォームが移動したときに、フォームの位置を変更するコードを追加する必要がある場合があります。

于 2008-12-09T14:03:33.650 に答える
0

最終的に、これに対する答えは、AreaControl の Region プロパティを使用することであることが判明しました。これは、部分的な透過性が必要ないためです。

于 2009-03-02T11:03:15.183 に答える