UpdateLayeredWindow, SIZE_RESTORED и проблема GetClientRect

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

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

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

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

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

1 ответ

Решение

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

Другие вопросы по тегам