Проблемы UpdateLayeredWindow, SIZE_RESTORED и GetClientRect - PullRequest
0 голосов
/ 21 сентября 2009

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

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

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

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

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

1 Ответ

1 голос
/ 21 сентября 2009

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

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