Как очистить графику на прозрачном элементе управления в окнах форм - PullRequest
6 голосов
/ 22 октября 2009

Итак, я довольно мало знаком с разработкой форм Windows.

Я пытаюсь создать компонент "эй, я занят чем-то", который просто вращает форму. Я хочу, чтобы этот элемент управления был временным и рисовал поверх любых других элементов управления. Класс наследуется напрямую от Control.

Итак, у меня есть это в конструкторе:

SetStyle(ControlStyles.Opaque, true);

и это:

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

Это дает мне элемент управления, который будет рисовать поверх других элементов управления.

Теперь моя проблема заключается в следующем. Я перекрашиваю элемент управления несколько раз в секунду, чтобы создать плавную анимацию. Однако я не могу понять, как очистить то, что было нарисовано в предыдущем кадре. Использование e.Graphics.Clear(Color.Transparent) в OnPaint делает весь элемент управления черным.

Есть ли способ просто очистить нарисованное содержимое элемента управления?

Я заметил, что изменение размера элемента управления очистит фон.

Вещи, которые не работают

  1. Переопределение OnPaintBackground ничего не делать. Или просто вызов base.OnPaintBackground. Те же результаты.

Ответы [ 2 ]

4 голосов
/ 23 октября 2009

Хорошо, я нашел решение здесь: http://www.bobpowell.net/transcontrols.htm

Родительские элементы управления фактически должны быть недействительными, чтобы сохранить прозрачный фон.

2 голосов
/ 23 октября 2009

Возможно, вам придется переопределить OnPaintBackground, представленное в этой статье: http://saftsack.fs.uni -bayreuth.de / ~ dun3 / архивы / создание прозрачной панели в сети / 108.html

Вам также может понадобиться аннулировать элемент управления, когда его необходимо очистить, чтобы вызвать OnPaintBackground.

...