调整窗口大小时,Windows 会发送几条消息:
- WM_GETMINMAXINFO
- WM_ENTERSIZEMOVE
- WM_EXITSIZEMOVE
- WM_NCCALCSIZE
- WM_SIZING
- WM_SIZE
- WM_WINDOWPOSCHANGING
- WM_WINDOWPOSCHANGED
可能还有更多。
如果我想在调整窗口大小时重新定位孩子,我应该在哪里以及如何做?
我正在寻找“最佳”方法——即问题最少且闪烁最少的方法。
我目前的方法是在内部执行所有重新定位WM_NCCALCSIZE
,使用DeferWindowPos
.
但是,我也尝试过在内部处理它WM_WINDOWPOSCHANGED
......但无论我在哪里处理它,似乎总是至少有一个“时刻”当窗口被绘制在中间状态时,窗口的大小有已更改,但其内容尚未调整大小。
我还想避免的另一个影响:在孩子已经移动之后再移动它。我不希望用户看到控件因为我的更改而向下滑动然后备份——它应该具有尽可能少的瞬态影响。
我这样做正确吗?有没有更好的地方可以布置窗户的孩子?