首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >屏幕截图的屏幕覆盖

屏幕截图的屏幕覆盖
EN

Stack Overflow用户
提问于 2010-02-01 20:42:54
回答 2查看 1.9K关注 0票数 6

我想通过C#在整个屏幕上覆盖一个灰色的、半透明的区域。通过Windows窗体可以做到这一点吗?我该如何开始呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-01 20:49:30

当然,只要创建一个覆盖所有桌面屏幕的无边框、半透明窗口即可。

您可以使用以下LINQ找到正确的矩形来覆盖所有屏幕:

代码语言:javascript
复制
Rectangle bounds = Screen.AllScreens
                       .Select(x => x.Bounds)
                       .Aggregate(Rectangle.Union);

然后从bounds设置窗口的左、上、宽和高

票数 8
EN

Stack Overflow用户

发布于 2010-02-01 22:44:38

除了使用约翰尼斯的建议将'FormBorderStyle属性设置为'None‘之外,我还在这个表单上设置了以下属性,用于“淡出”屏幕:

  1. TopMost,ShowInTaskBar,ControlBox,MaximizeBox,MinimizeBox:'False
  2. Text property : clear it

我在窗体的Load事件中设置了“淡出”窗体的大小:如果我想处理多个监视器的情况,我会使用Rob回答中的优雅代码来设置添加到项目中的窗体的边界。如果我只想处理一个监视器,我会做一些简单的事情,比如:

代码语言:javascript
复制
    // in the Load Event of the "dim-out" Form
    this.Bounds = Screen.PrimaryScreen.Bounds;

然后,当然,您可以在需要时显示此“淡出”表单,以响应可见表单上的任何内容。

显示“淡出”表单将使它出现在应用程序的其他可见表单的顶部(除非其中一个表单设置了TopMost或TopLevel属性)。

但是,您可以实现的一个很好的效果是在MessageBox (或以模式显示的表单)显示之前显示您的“淡出”表单:这意味着您将使MessageBox对话框(或模式表单)“在前面”,而后面的其他所有内容“变暗”。

下面是显示“灰显”表单的代码:

代码语言:javascript
复制
    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属性(该属性在设计时不公开),刷新有关该属性如何影响屏幕上窗体顺序的知识,并检查窗体的'TopMost属性(它在设计时公开)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2176648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档