Получение размера свернутого окна - PullRequest
2 голосов
/ 09 декабря 2010

Я никогда не знал этого, но, по-видимому:

По умолчанию система уменьшает свернутое окно до размера кнопки на панели задач и перемещает свернутое окно на панель задач.Восстановленное окно - это окно, которое было возвращено к его предыдущему размеру и позиции, то есть к размеру, который был до его минимизации или максимизации.

В приложении мы хотим сохранить позицию/ размер различных окон на выходе.Это приводит к проблеме для свернутых окон.Наше решение состоит в том, чтобы восстановить все окна перед запуском логики сохранения состояния, но это просто кажется хакерским.Есть ли лучший способ?

Ответы [ 2 ]

8 голосов
/ 09 декабря 2010

Как насчет использования GetWindowPlacement? , который возвращает WINDOWPLACEMENT структуру , которая содержит информацию о координатах окна в восстановленной позиции.

Помните, что (как отметил Лео Дэвидсон в комментариях) вы должны соблюдать разницу между рабочим пространством и координатами экрана.Как объясняется в документации WINDOWPLACEMENT:

Координаты, используемые в структуре WINDOWPLACEMENT, должны использоваться только функциями GetWindowPlacement и SetWindowPlacement.Передача координат рабочей области функциям, которые ожидают экранные координаты (например, SetWindowPos), приведет к тому, что окно появится в неправильном месте.Например, если панель задач находится в верхней части экрана, сохранение координат окна с помощью GetWindowPlacement и восстановление их с помощью SetWindowPos приводит к тому, что окно «ползет» вверх по экрану.

Или, прощеРешение, которое я без сомнения использовал ранее, состоит в том, чтобы просто проверить, свернуто ли окно перед сохранением состояния, и если это так, пропустить сохранение любой информации о состоянии.


Поскольку объясняется, почему окноменяет свой размер, когда его сворачивают, Запись в блоге Раймонда Чена (и связанная с ней запись) по теме обязательна для чтения.Они на самом деле не меняют размер кнопки на панели задач, а скорее на предопределенный размер 160x31.Он объясняет, что вы можете увидеть это, свернув дочернее окно MDI с его родителем - это действительно его размер.

1 голос
/ 09 декабря 2010

Обработка сообщения WM_SIZE. Если wParam не SIZE_MAXIMIZED или SIZE_MINIMIZED, сохраните размер и положение окна в некоторых переменных. Используйте эти переменные, когда окно закрыто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...