2010-02-01 73 views
6

我想通過C#覆蓋整個屏幕上的灰色,半透明區域。這可能通過Windows窗體來完成,我將如何去做這件事?屏幕覆蓋截圖

+1

嘿,也許你終於可以讓那該死的UAC提示很有用,如果你可以把你的窗口放在它的提示符上...... – 2010-02-01 12:52:44

回答

8

當然,只需創建一個覆蓋所有桌面屏幕的無邊框半透明窗口即可。

您可以找到合適的矩形覆蓋所有屏幕具有以下LINQ:

Rectangle bounds = Screen.AllScreens 
         .Select(x => x.Bounds) 
         .Aggregate(Rectangle.Union); 

然後設置左,上,寬度和窗口的高度,從bounds

+0

對,我想知道如何做到這一點。我似乎無法創建無邊框窗口,並且每當我選擇「最大化」窗體時,它不會覆蓋整個屏幕,並且會丟失底部5個像素和右側10個像素。 – cam 2010-02-01 12:50:57

+4

最大化可能不是你想要的。您希望窗口的大小與完整的可見屏幕區域相同(可能在所有屏幕上),並且可以通過將「FormBorderStyle」屬性設置爲「無」來使其無邊界。 – Joey 2010-02-01 12:54:13

+2

+1好用的Linq處理多個屏幕,謝謝! – BillW 2010-02-01 13:59:25

2

除使用Johannes的建議將FormBorderStyle屬性設置爲None,我還會在此窗體上設置以下用於「調暗」屏幕的屬性:

  1. TopMost,Show InTaskBar,控制盒,MaximizeBox,MinimizeBox:「假
  2. 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屬性(在設計時暴露)的知識。

+2

我們需要一個「合併答案」功能:)(+1) – 2010-02-01 14:50:00