Вопрос

В моем приложении MFC настроено многоуровневое окно.Я создал собственную версию CDialog, позволяющую настраивать различные части отображения окна.Все работает нормально, пока я не начинаю беспокоиться о минимизации и максимизации.

Если вы нажмете «Свернуть» или «Развернуть», окно будет реагировать точно так, как вы ожидаете (т. е. точно так же, как если бы НЕ использовалось многоуровневое окно).Однако когда я восстанавливаю окно, происходит что-то очень странное.

Прямоугольник клиента по умолчанию для моего тестового окна — 324x102.Например, когда я восстанавливаюсь из свернутого состояния, значения cx и cy, передаваемые в OnSize, равны 994, 550.Если я затем выполню GetClientRect (внутри OnSize), это будет размер, указанный для окна.Как ни странно, но если я выполню GetWindowRect, я верну правильный размер (хотя, очевидно, включая все мои неклиентские области).

Кто-нибудь знает, что здесь происходит и, что более важно, как я могу это исправить, чтобы GetClientRect сообщал ПРАВИЛЬНУЮ информацию?

Заранее спасибо!

Это было полезно?

Решение

Я придумал своего рода хак, чтобы решить эту проблему.В OnSize и OnMove я игнорирую получаемые (c)x и (c)y и обрабатываю все из GetWindowRect.Теперь приложение реагирует так, как ожидалось.Я пометил код комментарием [HACK].Хотя это кажется очень странным, мне бы хотелось услышать, ПОЧЕМУ это происходит.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top