Отрисовка прозрачности объединяет слои вместо перерисовки

У меня есть настраиваемый элемент управления, в котором я переопределяю следующий метод для создания прозрачного фона:

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

Что касается метода рисования, я делаю это:

    protected override void OnPaint(PaintEventArgs p)
    {
        base.OnPaint(p);
        Graphics e = p.Graphics;
        this.Size = Resources.CenterButtonHover.Size;
        if (mousedown)
        {
            e.DrawImage(Resources.CenterButtonDown, new Point(0, 0));
        }
        else if (hover)
        {
            e.DrawImage(Resources.CenterButtonHover, new Point(0, 0));
        }
        else
        {
            e.DrawImage(Resources.CenterButtonNormal, new Point(4, 4));
        }
        e.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
    }

И о различных событиях мыши при вызове this.Invalidate.

Прозрачность отображается правильно, но каждый раз при визуализации она отображается поверх последней визуализации вместо перерисовки. Это заставляет свечение становиться все более и более интенсивным, пока не станет просто большой каплей. Как это исправить?


person caesay    schedule 11.09.2010    source источник


Ответы (1)


Я решил это, оставив логическое значение, указывающее, нужно ли удалить градиент перед повторным рисованием.

        if (needsreset)
        {
            this.SuspendLayout();
            this.Region = new Region(this.ClientRectangle);
            needsreset = false;
            return;
        }
person caesay    schedule 11.09.2010