全屏C# Windows窗体覆盖所有显示器

问题描述 投票:0回答:4

有没有办法让 Windows 窗体应用程序全屏显示并让辅助显示器变黑?那么主显示器位于您的主显示器上,而所有其他显示器都是全黑的?

c# winforms fullscreen
4个回答
4
投票

您可以使用 Screen 类,它为您提供有关当前活动屏幕的信息。

// Form myFrm
Rectangle r = new Rectangle();
foreach (Screen s in Screen.AllScreens)
{
   if ( s != Screen.CurrentScreen ) // Blackout only the secondary screens
         r = Rectangle.Union(r, s.Bounds);
}
myFrm.Top = r.Top;
myFrm.Left = r.Left;
myFrm.Width = r.Width;
myFrm.Height = r.Height;
myFrm.TopMost = true; // This will bring your window in front of all other windows including the taskbar

1
投票

我可以想到一种方法,那就是找出计算机上有多少个显示器,以及它们之间的相对布局,然后在 0,0 处创建主窗口,最大化它并将其设置为 TopMost ,然后对其他显示器执行相同的操作,将它们放置在计算机每个显示器左上角对应的屏幕位置。

我能想到的唯一能在 WinForms 环境中受益的就是一个旨在进行测试的应用程序;该应用程序将覆盖整个桌面(任务栏除外;您必须禁用“开始”菜单),并且几乎确保用户无法查看除测试程序之外的任何内容。它会给你带来最小的性能优势。

大多数把除主显示器以外的所有显示器都黑掉的应用基本上都是使用DirectX来直接控制屏幕(通过显卡的下层接口)。如果您使用 WinForms 来编写程序,那么您的抽象级别比使用 DirectX 的高出大约 50 个级别。


0
投票

一种方法是在您的应用程序中创建第二个表单。当给定一组尺寸时,将在没有边框或菜单的情况下打开,并且背景设置为黑色。

当您的应用程序运行时,枚举您的显示器(数一下它们的数量)并找到它们的尺寸。您的第一个将从 0,0 开始。 然后为每个显示器(主显示器除外)生成第二个表单的副本,并为该表单提供显示器的尺寸。然后他们会将每个屏幕变黑。

您需要记住保留每个表单的句柄,并在终止主表单时终止它们。


0
投票

此代码在.net Framework中不起作用,因为没有Screen.CurrentScreen

所以我修改如下:

        var rect = Screen.PrimaryScreen.Bounds;

        foreach (var screen in Screen.AllScreens)
        {
            if (screen != Screen.PrimaryScreen)
                rect = Rectangle.Union(rect, screen.Bounds);
        }
        Top = rect.Top;
        Left = rect.Left;
        Width = rect.Width;
        Height = rect.Height;
© www.soinside.com 2019 - 2024. All rights reserved.