C#最佳方法来调暗屏幕,多个Windows窗体?

时间:2011-09-10 17:46:00

标签: c# winforms screen

所以我编写了一些代码,用于从父级创建一个新的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 个答案:

答案 0 :(得分:2)

另一种仅使用单个窗口的方法是使用alpha混合图像绘制透明的深色背景(甚至可以有渐变),并使用非透明的自定义绘制进度条。请参阅http://www.codeproject.com/KB/GDI-plus/perpxalpha_sharp.aspx

在该项目中,您可以找到一个类,您可以使用该类轻松地将alpha混合位图分配给表单的背景。此方法的问题是您必须自定义绘制表单上的所有内容,包括进度条或您需要的任何其他控件。

您尝试实现的效果对于Windows应用程序来说有点不寻常,这就是为什么最好的方法不是很简单。