屏幕覆盖截图
当然,只需创建一个覆盖所有桌面屏幕的无边框半透明窗口即可。
您可以找到合适的矩形覆盖所有屏幕具有以下LINQ:
Rectangle bounds = Screen.AllScreens
.Select(x => x.Bounds)
.Aggregate(Rectangle.Union);
然后设置左,上,宽度和窗口的高度,从bounds
除使用Johannes的建议将FormBorderStyle属性设置为None,我还会在此窗体上设置以下用于“调暗”屏幕的属性:
- TopMost,Show InTaskBar,控制盒,MaximizeBox,MinimizeBox:“假
- Text属性:清除它
我会设置在窗体的Load事件中的‘模糊了’窗体的尺寸:我会用优雅如果我想处理多个监视器的情况,Rob在Rob的答案中设置了添加到项目中的Form的边界。如果我只是想只处理了一个监视器,我只是不喜欢简单的东西:
// in the Load Event of the "dim-out" Form
this.Bounds = Screen.PrimaryScreen.Bounds;
然后,当然,你可以显示这个“模糊了”表格时您在响应任何有关需要您可见的表单。
显示“暗淡”窗体将使其出现在应用程序的其他可见窗体上(除非其中一个窗体已设置了TopMost或TopLevel属性)。
但是,您可以实现的一个很好的效果是在显示MessageBox(或模式显示的窗体)之前显示您的“模糊”窗体:这意味着您将有消息框对话框(或模式窗体) “在前面”以及其后面的所有内容“变暗”。
因此,这里是你的代码如何显示“变暗”的形式看起来:
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();
你可能想看看“顶层属性(它不是在设计时暴露的),并刷新您对该财产如何影响屏幕上的表单顺序以及检查表单的TopMost属性(在设计时暴露)的知识。
我们需要一个“合并答案”功能:)(+1) – 2010-02-01 14:50:00
嘿,也许你终于可以让那该死的UAC提示很有用,如果你可以把你的窗口放在它的提示符上...... – 2010-02-01 12:52:44