C # Лучший способ затемнить экран, несколько форм Windows? - PullRequest
3 голосов
/ 10 сентября 2011

Итак, я написал код для создания новой формы Windows из родительского элемента с полноэкранным режимом, черным цветом и непрозрачностью 80% для создания эффекта затемнения.

Затем над ним отображается другая форма, показывающая прогресс.

Код в настоящее время выглядит так:

    this.Enabled = false;

    frmDimScreen.BackColor = Color.Black;
    frmDimScreen.Opacity = .8;
    frmDimScreen.FormBorderStyle = FormBorderStyle.None;
    frmDimScreen.Size = new Size(splitContainerMain.Width - 4, splitContainerMain.Height - 2);
    frmDimScreen.StartPosition = FormStartPosition.Manual;
    frmDimScreen.ShowIcon = false;
    frmDimScreen.ShowInTaskbar = false;
    frmDimScreen.Show();
    frmDimScreen.Location = new Point(splitContainerMain.Location.X + 2,         ((splitContainerMain.Location.Y + tsMainTools.Height) - 4));

    addImgIL.ShowIcon = false;
    addImgIL.ShowInTaskbar = false;
    addImgIL.TopMost = true;
    addImgIL.Show();
    addImgIL.Location = new Point((this.Width - addImgIL.Width) / 2, (this.Height -         addImgIL.Height) / 2);
    addImgIL.BringToFront();

Основная причина, по которой я спрашиваю, заключается в том, что если родительское окно теряет фокус, тогда дочерние формы выходят из строя и неправильно распределяются по слоям. Я знаю, что могу справиться с этим через OnPaint, но ищу лучшее решение.

Вопрос / проблема, это лучший способ добиться того, что я пытаюсь сделать? Должен ли я использовать формы или графику для создания затемнения? Что каждый испытывает с этим?

Заранее спасибо!

1 Ответ

2 голосов
/ 11 сентября 2011

Другой подход, использующий только одно окно, заключается в использовании альфа-смешанного изображения для рисования прозрачного темного фона (у вас даже может быть градиент) с непрозрачной пользовательской нарисованной шкалой прогресса. См http://www.codeproject.com/KB/GDI-plus/perpxalpha_sharp.aspx.

В этом проекте вы можете найти класс, который вы можете использовать для простого назначения растрового изображения с альфа-смешением фону формы. Проблема этого метода заключается в том, что вы должны настраивать все элементы формы, включая индикатор выполнения или любые другие элементы управления, которые вам нужны.

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

...