Пользователи жалуются, что когда у них несколько свернутых окон в MDI-контейнере, то их невозможно различить, если не перепрошивать каждое. Интересно, можно ли сделать свернутое окно немного шире, чтобы текст в заголовке мог состоять из 6 символов?
Заранее спасибо!
Можно ли изменить размер свернутого окна в MDI С# Winforms
Ответы (1)
Нет, это невозможно. Windows определяет ширину свернутого окна, используя текущие системные параметры, и нет возможности изменить ее динамически для одного приложения без изменения значений во всей системе.
В частности, размер всех свернутых окон по умолчанию составляет 160x31. В приложении MDI вы фактически видите этот размер, потому что окно свернуто в свой хост MDI, а не в панель задач Windows. Рэймонд Чен (разработчик из группы Windows Shell в Microsoft) недавно опубликовал несколько записей в блоге, в которых объясняется, почему был выбран именно этот размер и что он означает. Первый доступен здесь: Почему свернутые окна имеют очевидный размер 160x31? А вторую последующую запись можно прочитать здесь: Нет, правда, почему именно 160x31? Как он объясняет во втором посте:
Ширина миниатюрной строки заголовка определяется элементом
iWidth
структурыMINIMIZEDMETRICS
. Вы можете получить и изменить эту структуру с помощью функцииSystemParametersInfo
. (Используйте флагиSPI_GETMINIMIZEDMETRICS
иSPI_SETMINIMIZEDMETRICS
соответственно.) Некоторые люди будут упоминать значение реестраMinWidth
, но эти люди ошибаются. Обратите внимание, например, что работа сMinWidth
требует цикла выхода из системы, тогда как использованиеSPI_SETMINIMIZEDMETRICS
вступает в силу немедленно. Это потому, чтоSPI_SETMINIMIZEDMETRICS
обновляет внутренние переменные состояния, тогда как взлом реестра просто изменяет значение в базе данных, на которое никто не обращает внимания после того, как вы вошли в систему.А высота? Это всего лишь высота строки заголовка, которую можно настроить на вкладке «Внешний вид» панели управления «Экран». (Программно вы можете использовать эту полезную функцию
SystemParametersInfo
, на этот раз используя элементiCaptionHeight
структурыNONCLIENTMETRICS
.)
Поскольку я сомневаюсь, что ваши пользователи действительно хотят, чтобы вы возились с их системными параметрами по умолчанию, P/вызывая SystemParametersInfo
, у вас не так много вариантов. Моя рекомендация, особенно если они работают с одним окном за раз, а остальные свернуты, — переключиться на альтернативный интерфейс. Цель MDI состояла в том, чтобы позволить пользователям размещать несколько окон в виде мозаики или каскада, чтобы они могли видеть более одного окна одновременно. Поскольку похоже, что это не типичный вариант использования, вам обоим может быть лучше, переключив приложение на использование вкладок. Его часто называют интерфейсом документов с вкладками (TDI), несколько более современной реализацией старого многодокументного интерфейса (MDI). С годами он стал довольно популярным; прочтите статью Википедии.