5

アウトラインのみを表示するコントロールを作成する必要があり、ビデオを表示しているコントロールの上に配置する必要があります。コントロールを透明にすると、透明なコントロールは親コントロールによって描画され、ビデオはコントロールによって描画されないため、ビデオは不明瞭になります。DirectShow または別のライブラリを使用して表示されるため、代わりに親コントロールが BackColor をペイントします。

では、不透明な場所を除いて、まったく描画されないコントロールを作成できますか? そうすれば、親コントロールはビデオを塗りつぶしません。

境界線を 4 つのコントロール (破線にしたい場合はそれ以上) から作成できることはわかっていますが、1 つのコントロールだけでやりたいことを実行できますか?


rslite の言うとおりです。彼の例のように PInvoke を使用する必要さえありませんが、Control.Region プロパティで十分です。

4

3 に答える 3

4

内部に穴のある領域を作成し、SetWindowRgn で制御領域を設定することができます。

これが例です(より良いものを見つけることができませんでした)。アイデアは、2 つの領域を作成し、外側の領域から内側の領域を差し引くことです。それはあなたが必要とするものをあなたに与えるべきだと思います。

于 2008-11-21T13:03:36.917 に答える
0

そのために、クラス コントロールからオーバーライドされた関数を使用します。

  1. このcreateparamsプロパティは、コントロールを透明にできることを示します。

  2. InvalidateExコントロールが配置されている親の領域を無効にする必要があります

  3. コントロールから背景色の自動ペイントを無効にする必要があります (')

    Imports System.Windows.Forms.Design
    Imports System.Reflection
        Public Class TransparentControl : Inherits Control
            Protected Overrides ReadOnly Property CreateParams As CreateParams
                Get
                    Dim cp As CreateParams = MyBase.CreateParams()
                    cp.ExStyle = cp.ExStyle Or 32 'WS_EX_TRANSPARENT
                    Return cp
                End Get
             End Property
            Protected Sub InvalidateEx(rct As Rectangle)
                Me.Invalidate(rct)
                If IsNothing(Parent) Then Exit Sub
                Parent.Invalidate(New Rectangle(Me.Location, rct.Size), True)
            End Sub
            Protected Sub InvalidateEx()
                Me.Invalidate()
                 If IsNothing(Parent) Then Exit Sub
                 Parent.Invalidate(New Rectangle(Me.Location, Me.Size), True)
            End Sub
            Protected Overrides Sub OnPaintBackground(pevent As PaintEventArgs)
                'MyBase.OnPaintBackground(pevent)
            End Sub
    
            Protected Overrides Sub OnPaint(e As PaintEventArgs)
                 MyBase.OnPaint(e)
                'draw the layout on e.Graphics
            End Sub
        End Class
    

このクラスを拡張して、独自のコントロールを作成できます。デバッグ後、クラスがツールボックスに表示されます。

これでうまくいくことを願っています。

于 2013-12-30T23:24:51.873 に答える
-1

Form.TransparencyKeyプロパティを設定してみてください。それができない場合は、DirectX を使用してフレーム バッファーにアクセスし、直接描画することができます。

于 2008-11-21T13:12:39.957 に答える