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

标签 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 处理这个问题,但正在寻找最佳解决方案。

问题/问题,这是实现我正在尝试的目标的最佳方法吗?我应该使用表格还是图形来创建调光?每个人对此有何经验?

提前致谢!

最佳答案

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

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

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

关于C# 调暗屏幕、多个 Windows 窗体的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7373483/

相关文章:

winforms - C++ CLI KeyDown::raise 错误 error C3767 候选函数不可访问

c - ncurses 和 getch - 处理删除和箭头字符

android - 如何查看手机是否处于待机模式? (屏幕关闭,按下电源按钮)

c# - protobuf-net 中非必填字段的序列化

c# - 在图片框中显示/读取 8 位灰度(未压缩)TIFF 并使用 AForge.net c# 进行操作

c# - WCF 中的非等待任务会怎样?

c# - 从另一个类和线程的接口(interface)回调更新 winform

c# - 从 SQL Server 更新数据网格 - 更新过程不起作用

html - 如何在任何显示器上的相同位置显示一个 div 而不管物理尺寸

c# - MSDeploy - 允许参数在 parameters.xml 中是可选的/为空的