Вопрос по winapi, window-resize, visual-c++ – Когда (и как) выложить дочерние элементы окна Win32 в ответ на изменение размера?

3

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 из-за моих изменений - у него должно быть как можно меньше переходных эффектов.

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

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

Ваш Ответ

1   ответ
4

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

Похожие вопросы