C# 屏幕截图的屏幕覆盖
我想通过C#在整个屏幕上覆盖一个灰色的半透明区域。这可以通过Windows窗体实现吗?我将如何实现这一点?当然,只需创建一个覆盖所有桌面屏幕的无边框半透明窗口即可 您可以找到用以下LINQ覆盖所有屏幕的右矩形:C# 屏幕截图的屏幕覆盖,c#,C#,我想通过C#在整个屏幕上覆盖一个灰色的半透明区域。这可以通过Windows窗体实现吗?我将如何实现这一点?当然,只需创建一个覆盖所有桌面屏幕的无边框半透明窗口即可 您可以找到用以下LINQ覆盖所有屏幕的右矩形: Rectangle bounds = Screen.AllScreens .Select(x => x.Bounds) .Aggregate(Rectangle.Union); 然后从边界
Rectangle bounds = Screen.AllScreens
.Select(x => x.Bounds)
.Aggregate(Rectangle.Union);
然后从
边界设置窗口的左侧、顶部、宽度和高度
除了使用Johannes的建议将“FormBorderStyle”属性设置为“None”之外,我还将此表单上用于“调暗”屏幕的以下属性设置为:
// in the Load Event of the "dim-out" Form
this.Bounds = Screen.PrimaryScreen.Bounds;
然后,当然,当您需要响应可见窗体上的任何内容时,您可以显示此“淡出”窗体
显示“淡出”窗体将使其显示在应用程序的其他可见窗体的顶部(除非其中一个窗体设置了最顶层或顶层属性)
但您可以实现的一个很好的效果是在显示MessageBox(或以模式显示的窗体)之前显示“dim out”窗体:这意味着您将“前面”显示MessageBox对话框(或模式窗体),后面的所有内容都“dim out”
下面是显示“暗显”窗体的代码的外观:
dimmedForm.Show();
// change these to suit your taste or purpose
// this.BringToFront();
// dimmedForm.BringToFront();
// example of showing a MessageBox over the dimmedForm
// which will block the current thread
MessageBox.Show("why not ?");
// now hide the dimmedForm
dimmedForm.Hide();
您可能希望查看“TopLevel”属性(在设计时未公开)并重新了解该属性如何影响屏幕上的表单顺序,以及检查“表单的最顶层属性(在设计时公开)。好的,我想知道如何做到这一点。我似乎无法创建一个无边框的窗口,每当我选择要“最大化”的窗体时,它都不会覆盖整个屏幕,并且忽略了底部的5个像素和右侧的10个像素。最大化可能不是您想要的。您希望窗口的大小与整个可见屏幕区域的大小相同(可能在所有屏幕上),您可以通过将
FormBorderStyle
属性设置为None
使其无边界代码>和位置=边界位置但是,对于我的代码,它不适用于非标准屏幕布局。就像2是1的左边一样,上面的只在一个显示器上显示,而不是两个显示器上都显示。嘿,也许你最终可以让那个该死的UAC提示符变得有用,如果你能把你的窗口放在它的提示符上……我们需要一个“合并答案”功能:)(+1)