调整窗口大小时,Windows会发送几条消息:
> WM_GETMINMAXINFO
> WM_ENTERSIZEMOVE
> WM_EXITSIZEMOVE
> WM_NCCALCSIZE
> WM_SIZING
> WM_SIZE
> WM_WINDOWPOSCHANGING
> WM_WINDOWPOSCHANGED
甚至可能更多.
如果我想在调整窗口大小时重新定位孩子,我应该在哪里以及如何这样做?
我正在寻找“最好的”方法 – 即具有最少陷阱和最少闪烁的方法.
我目前的方法是使用DeferWindowPos在WM_NCCALCSIZE中执行所有重新定位.
但是,我也试过在WM_WINDOWPOSCHANGED中处理它…但无论我在哪里处理它,似乎总是至少有一个“时刻”当窗口被绘制在中间状态,窗口的大小已经改变,但其内容尚未调整大小.
我还想避免的另一个影响:在孩子移动后移动孩子.我不希望用户看到控件滑落然后因为我的更改而备份 – 它应该具有尽可能少的瞬态效果.
我这样做了吗?是否有一个更好的地方可以摆放窗户的孩子?
您应该在WM_SIZE消息中重新定位窗口,因为这是窗口在完成任务之前收到的最后一个…要重新定位窗口,您可以使用MoveWindow
原文链接:https://www.f2er.com/windows/372082.html