UpdateAllViews также вызывает OnSize - PullRequest
0 голосов
/ 06 мая 2011

У меня есть приложение MFC, оно получило архитектуру Document / View, но настроено на использование только одного представления. Пока все хорошо.

Я загружал файл в документ и думал, что лучший способ уведомить представление о новых данных - это вызвать UpdateAllViews(), когда файл завершит загрузку. Это работает хорошо; Я могу передать данные из документа в представление с помощью функции OnUpdate() в представлении.

Однако, сразу после OnUpdate() также вызывается OnSize(). Это не было бы проблемой, если бы не тот факт, что он вызывается с размером, который был у окна при его создании. Поэтому, если я запущу программу, изменим размер окна и затем открою файл, окно вернется к тому размеру, который был у него изначально! Если я максимизирую окно и затем вызываю UpdateAllViews(), оно изменится, все еще думая, что оно максимизировано, поэтому мне нужно восстановить его, прежде чем я смогу изменить его размер снова. Это очень раздражает, и мне интересно, есть ли способ обойти это? Может быть, я даже не могу использовать UpdateAllViews() таким образом?

1 Ответ

0 голосов
/ 09 мая 2011

Хорошо, оказалось, что это не из-за UpdateAllViews(). Это на самом деле происходит всякий раз, когда вы открываете документ в MFC. Многое происходит, когда вы делаете это, и среди этого, очевидно, посылается команда изменения размера.

Эта команда изменения размера изменит размер представления до размера его "документа" (не путать с документом в архитектуре документа / представления). В моем случае (поскольку я основывал свой взгляд на CFormView), размер документа соответствовал размеру формы.

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

Я решил это, вызвав SetScaleToFitSize() в функции OnSize() моего представления, что приводит к изменению размера не только представления, но и самой формы при каждом изменении размера представления. Поскольку форма теперь всегда имеет тот же размер, что и представление, обновление размера, отправляемое при открытии файла, не имеет никакого эффекта.

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