Windows отправляет несколько сообщений при изменении размера окна:
- WM_GETMINMAXINFO
- WM_ENTERSIZEMOVE
- WM_EXITSIZEMOVE
- WM_NCCALCSIZE
- WM_SIZING
- WM_SIZE
- WM_WINDOWPOSCHANGING
- WM_WINDOWPOSCHANGED
и, возможно, больше.
Если я хочу переместить дочерние элементы при изменении размера окна, где и как мне это сделать?
Я ищу "лучший" вариант. метод -- то есть метод с наименьшим количеством ошибок и наименьшим мерцанием.
Мой текущий метод состоит в том, чтобы выполнить все изменения внутри WM_NCCALCSIZE
, используя DeferWindowPos
.
Однако я также пытался обработать его внутри WM_WINDOWPOSCHANGED
... но независимо от того, где я это обрабатываю, кажется, что существует всегда по крайней мере один "момент", когда окно рисуется в промежуточном состоянии, когда размер окна изменился, но его содержимое еще не было изменено .
Еще один эффект, которого я тоже хотел бы избежать: перемещение дочернего элемента после его перемещения. Я не хочу, чтобы пользователь видел, как элемент управления скользит вниз, а затем возвращается вверх из-за моего изменения — у него должно быть как можно меньше временных эффектов.
Я делаю это правильно? Есть ли лучшее место, где я могу выложить детей окна?
WM_WINDOWPOSCHANGED
на самом деле также является уведомлением о размере. (Хотя исправлена опечатка.) Спасибо за информацию оWM_SIZE
. - person user541686   schedule 04.06.2012