Heim > Backend-Entwicklung > C++ > Wie erstelle ich transparente Steuerelemente in .NET 3.5?

Wie erstelle ich transparente Steuerelemente in .NET 3.5?

Mary-Kate Olsen
Freigeben: 2025-01-04 03:47:40
Original
941 Leute haben es durchsucht

How to Create Transparent Controls in .NET 3.5?

Erstellen transparenter Steuerelemente in .NET 3.5

In Ihrer Bildbearbeitungsanwendung möchten Sie bei Auswahl eines Werkzeugs ein transparentes Rechteck erstellen. Das Erreichen von Transparenz in .NET 3.5 erfordert bestimmte Überlegungen.

Um Transparenz zu aktivieren, legen Sie den Stil „ControlStyles.SupportsTransparentBackColor“ auf „true“ und die Hintergrundfarbe des Steuerelements auf „Color.Transparent“ fest. Wenn dies jedoch nicht funktioniert, müssen Sie möglicherweise ein benutzerdefiniertes Steuerelement verwenden, das die Transparenz effektiv verwaltet.

Hier ist ein benutzerdefiniertes TranspCtrl, das die erforderliche Funktionalität bereitstellt:

public class TranspCtrl : Control
{
    public bool drag = false;
    public bool enab = false;
    private int m_opacity = 100;

    private int alpha;

    public TranspCtrl()
    {
        SetStyle(ControlStyles.SupportsTransparentBackColor, true);
        SetStyle(ControlStyles.Opaque, true);
        this.BackColor = Color.Transparent;
    }

    public int Opacity
    {
        get
        {
            if (m_opacity > 100)
            {
                m_opacity = 100;
            }
            else if (m_opacity < 1)
            {
                m_opacity = 1;
            }
            return this.m_opacity;
        }
        set
        {
            this.m_opacity = value;
            if (this.Parent != null)
            {
                Parent.Invalidate(this.Bounds, true);
            }
        }
    }

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle = cp.ExStyle | 0x20;
            return cp;
        }
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        Rectangle bounds = new Rectangle(0, 0, this.Width - 1, this.Height - 1);

        Color frmColor = this.Parent.BackColor;
        Brush bckColor = default(Brush);

        alpha = (m_opacity * 255) / 100;

        if (drag)
        {
            Color dragBckColor = default(Color);

            if (BackColor != Color.Transparent)
            {
                int Rb = BackColor.R * alpha / 255 + frmColor.R * (255 - alpha) / 255;
                int Gb = BackColor.G * alpha / 255 + frmColor.G * (255 - alpha) / 255;
                int Bb = BackColor.B * alpha / 255 + frmColor.B * (255 - alpha) / 255;
                dragBckColor = Color.FromArgb(Rb, Gb, Bb);
            }
            else
            {
                dragBckColor = frmColor;
            }

            alpha = 255;
            bckColor = new SolidBrush(Color.FromArgb(alpha, dragBckColor));
        }
        else
        {
            bckColor = new SolidBrush(Color.FromArgb(alpha, this.BackColor));
        }

        if (this.BackColor != Color.Transparent | drag)
        {
            g.FillRectangle(bckColor, bounds);
        }

        bckColor.Dispose();
        g.Dispose();
        base.OnPaint(e);
    }

    protected override void OnBackColorChanged(EventArgs e)
    {
        if (this.Parent != null)
        {
            Parent.Invalidate(this.Bounds, true);
        }
        base.OnBackColorChanged(e);
    }

    protected override void OnParentBackColorChanged(EventArgs e)
    {
        this.Invalidate();
        base.OnParentBackColorChanged(e);
    }
}
Nach dem Login kopieren

Indem Sie dies nutzen Mit der benutzerdefinierten Steuerung können Sie transparente Rechtecke oder andere Steuerelemente in Ihrem Bildeditor erstellen.

Das obige ist der detaillierte Inhalt vonWie erstelle ich transparente Steuerelemente in .NET 3.5?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage