.Net / Winforms,双显示器 – 无边框窗口 – 最大化不起作用

我有一个没有回答的问题

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/fa521007-f317-48f1-9cdd-de2dbcb17aa8

(最后的post是我的post)。 StackOverflow是更好的论坛所以你能帮助我:)

简述:

  • 双显示器配置,右侧主显示器具有较低分辨率,左侧显示器具有较高分辨率(低:1280×1024;高:1680×1050)。 最大化时,窗口大于监视器(仅适用于左侧监视器)
  • 在无边框窗口基类上工作
  • 最大化到实际客户区域不能按预期工作。 解决方法是添加一个WndProc钩子并摆弄尺寸参数。 多显示器支持增加了一些问题,因为最大化似乎依赖于MaxTrackSize而不是MaxSize。 这似乎只在主监视器小于第二个监视器时才会发生

我在规范中找到的东西:

http://msdn.microsoft.com/en-us/library/ms632605(v=VS.85).aspx

对于具有多个监视器的系统,ptMaxSize和ptMaxPosition成员描述主监视器上窗口的最大化大小和位置,即使窗口最终最大化到辅助监视器上也是如此。 在这种情况下,窗口管理器会调整这些值以补偿主监视器和显示窗口的监视器之间的差异。 因此,如果用户不接触ptMaxSize,则监视器上的窗口大于主监视器的窗口最大化到较大监视器的大小。

因此,如果我在我的情况下正确理解,当有任务栏被放置在最大化窗口下不隐藏它时, 不可能在屏幕上以最高分辨率最大化?

干杯,jbk

您可以实现自己的“最大化”:

  1. 使用Screen.FromControl确定表单所在的屏幕
  2. 根据屏幕的偏移和大小设置Forma的偏移量和大小。
  3. 您可以根据需要使用Screen的WorkingArea(桌面区域)或Bounds(带工具栏的整个屏幕)。

*如果你想隐藏工具栏并且事实上是“全屏”,我认为你需要将表格设置为TopMost。

这对我有用:

  1. FormBorderStyle设置为FixedSingle – 也可以使用其他样式!= ,尚未测试…
  2. WindowState设置为FormWindowState.Maximized
  3. FormBorderStyle重置为

至少,它适用于纯WinForms的东西,而不诉诸WinAPI