3

调整窗口大小时,Windows 会发送几条消息:

  • WM_GETMINMAXINFO
  • WM_ENTERSIZEMOVE
  • WM_EXITSIZEMOVE
  • WM_NCCALCSIZE
  • WM_SIZING
  • WM_SIZE
  • WM_WINDOWPOSCHANGING
  • WM_WINDOWPOSCHANGED

可能还有更多。

如果我想在调整窗口大小时重新定位孩子,我应该在哪里以及如何做?
我正在寻找“最佳”方法——即问题最少且闪烁最少的方法。

目前的方法是在内部执行所有重新定位WM_NCCALCSIZE,使用DeferWindowPos.
但是,我也尝试过在内部处理它WM_WINDOWPOSCHANGED......但无论我在哪里处理它,似乎总是至少有一个“时刻”当窗口被绘制在中间状态时,窗口的大小有已更改,但其内容尚未调整大小。

我还想避免的另一个影响在孩子已经移动之后再移动它。我不希望用户看到控件因为我的更改而向下滑动然后备份——它应该具有尽可能少的瞬态影响。

我这样做正确吗?有没有更好的地方可以布置窗户的孩子?

4

1 回答 1

4

您应该在 WM_SIZE 消息中重新定位窗口,因为这是窗口在完成任务之前收到的最后一个窗口...要重新定位窗口,您可以使用 MoveWindow

于 2012-06-03T20:36:03.427 回答