【问题标题】:Full screen c# windows form covering all monitor全屏 c# windows 窗体覆盖所有显示器
【发布时间】:2012-06-18 22:04:03
【问题描述】:

有没有办法让 Windows 窗体应用程序全屏显示并关闭辅助显示器?所以主显示器在你的主显示器上,而你所有的其他显示器都是全黑的?

【问题讨论】:

标签: c# winforms fullscreen


【解决方案1】:

您可以使用 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

【讨论】:

  • 如果主屏幕位于中间的三显示器设置,最终也会使主屏幕变黑。
  • 没错,但在这种情况下,使用一种单一的形式并不容易做到这一点(从技术上讲,使用区域是可能的)。该方法可用于分屏生成一个表单。
【解决方案2】:

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

我能想到的唯一能在 WinForms 环境中从中受益的是一个旨在提供测试的应用程序;该应用程序将覆盖整个桌面(任务栏除外;您必须禁用“开始”菜单),并且几乎可以确保用户除了测试程序之外什么都看不到。它会给您带来最小的性能优势。

大部分黑屏的应用,除了主屏外,基本上都是用DirectX直接控制屏幕(通过显卡的底层接口)。如果您使用 WinForms 来制作程序,那么您的抽象级别大约比使用 DirectX 高 50 级。

【讨论】:

    【解决方案3】:

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

    当您的应用程序运行时,枚举您的监视器(数一数以查看有多少)并找出它们的尺寸。你的主要从 0,0 开始。 然后为您的每个监视器(除了您的主要监视器)生成第二个表单的副本,并为该表单提供监视器的尺寸。然后他们会将每个屏幕变黑。

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

    【讨论】:

      猜你喜欢
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-05
      • 2017-08-30
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多