.Net / Winforms, Двойной монитор - Окно без границ - Максимизация не работает - PullRequest
1 голос
/ 13 декабря 2010

У меня есть вопрос, на который не ответили

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

(последние сообщения - мои сообщения). StackOverflow - лучший форум, так что вы могли бы мне помочь :)

Кратко:

  • конфигурация с двумя мониторами, основной монитор справа имеет более низкое разрешение, слева монитор с более высоким разрешением (lo: 1280x1024; hi: 1680x1050). При максимизации на большем, окно больше, чем монитор (работает только на левом мониторе)
  • работает с базовым классом окон без полей
  • максимизировать до фактической клиентской области не работает как положено. Решается добавлением хука WndProc и переключением параметров размера. Поддержка нескольких мониторов добавила некоторые проблемы, потому что максимизация, кажется, полагается на MaxTrackSize вместо MaxSize. Похоже, это происходит только тогда, когда основной монитор меньше второго монитора

Что-то, что я нашел в спецификации:

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

Для систем с несколькими мониторами, ptMaxSize и ptMaxPosition члены описывают максимальный размер и положение окна на основной монитор, даже если окно в конечном итоге максимизируется на вторичном монитор. В этом случае окно менеджер корректирует эти значения компенсировать различия между основной монитор и монитор, который отображает окно. Таким образом, если пользователь оставляет ptMaxSize нетронутым, окно на мониторе больше основного монитор максимально увеличивается до размера монитор большего размера.

Так что, если я правильно понимаю, в моем случае невозможно максимизировать на экране с более высоким разрешением, когда есть панель задач, расположенная таким образом, чтобы не скрывать ее под развернутым окном?

Ура, JBK

Ответы [ 2 ]

0 голосов
/ 14 июня 2013

Вот что у меня сработало:

  1. Установить FormBorderStyle на FixedSingle - может также работать с другими стилями! = Нет , не проверял это ...
  2. Установить WindowState на FormWindowState.Maximized
  3. Сброс FormBorderStyle до Нет

По крайней мере, он работает для чистого WinForms, не прибегая к WinAPI

0 голосов
/ 16 февраля 2011

Вы можете реализовать свой собственный «максимизировать»:

  1. Определите, на каком экране находится ваша форма, с помощью Screen.FromControl
  2. Установите смещение и размер вашей формы в соответствии со смещением и размером экрана.
  3. При необходимости можно использовать либо WorkingArea (область рабочего стола), либо Bounds (весь экран с панелями инструментов) экрана.

* Если вы хотите скрыть панели инструментов и быть де-факто «на весь экран», я думаю, вам нужно будет установить форму как TopMost.

...