Можно ли изменить размер свернутого окна в MDI С# Winforms


Пользователи жалуются, что когда у них несколько свернутых окон в MDI-контейнере, то их невозможно различить, если не перепрошивать каждое. Интересно, можно ли сделать свернутое окно немного шире, чтобы текст в заголовке мог состоять из 6 символов?
Заранее спасибо!


person StuffHappens    schedule 27.01.2011    source источник
comment
Есть ли обходной путь? Скажите, возможно ли показать панель инструментов при наведении курсора мыши на минимизированную форму?   -  person StuffHappens    schedule 27.01.2011
comment
Под панелью инструментов, я полагаю, вы имеете в виду всплывающую подсказку? И да, это вариант, хотя и не очень элегантный. Или вы можете научить их пользоваться меню «Окно», которое перечисляет (и позволяет переключаться) все открытые окна с их полными именами.   -  person Cody Gray    schedule 27.01.2011
comment
Я думаю, вы можете использовать меню Windows в качестве обходного пути, который поможет пользователям получить все дочерние окна. - Установить свойство MDIWindowListItem полосы меню.   -  person Anuraj    schedule 27.01.2011


Ответы (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). С годами он стал довольно популярным; прочтите статью Википедии.

person Cody Gray    schedule 27.01.2011