Когда (и как) выложить дочерние элементы окна Win32 в ответ на изменение размера?

Windows отправляет несколько сообщений при изменении размера окна:

WM_GETMINMAXINFO WM_ENTERSIZEMOVE WM_EXITSIZEMOVE WM_NCCALCSIZE WM_SIZING WM_SIZE WM_WINDOWPOSCHANGING WM_WINDOWPOSCHANGED

и возможно больше.

Если я хотел бы переместить детей, когда мое окно изменено,where а такжеhow я должен сделать это?
Я ищу "лучший" метод, т.е. метод с наименьшим количествомleast flicker.

мойcurrent Метод заключается в том, чтобы выполнить все перестановки внутриWM_NCCALCSIZE, с помощьюDeferWindowPos.
Однако я также пытался справиться с этим внутриWM_WINDOWPOSCHANGED... но независимо от того, где я обращаюсь, кажется, что естьalways по крайней мереone & Quot; момент & Quot; когда окно окрашено в промежуточном состоянии, где размер окна изменился, но его содержимое еще не было изменено.

Еще один эффект я быalso хотел бы избежать: переезд ребенкаafter оно уже переехало. Я не хочу, чтобы пользователь видел, как элемент управления скользит вниз, а затемback из-за моих изменений - у него должно быть как можно меньше переходных эффектов.

Я делаю это правильно? Есть ли лучшее место, где я могу выложить окна детей?

 Hans Passant03 июн. 2012 г., 21:55
Нет большого смысла в изменении размера дочернего окна, когда только родительские окнаposition изменилось. WM_SIZE обеспечивает наименьшее количество мерцания.
 Mehrdad03 июн. 2012 г., 22:05
@HansPassant: Хорошо, я этого не делал.WM_WINDOWPOSCHANGED на самом деле уведомление для размера тоже. (Исправлена опечатка.) Спасибо за информацию оWM_SIZE.

Ответы на вопрос(1)

потому что оно является последним, которое окно получает перед завершением его задачи ... Чтобы переместить окно, вы можете использовать MoveWindow.

Ваш ответ на вопрос