当(以及如何)奠定了一个Win32窗口的孩子响应调整大小?(When (and how) to la

2019-06-25 03:45发布

当调整窗口大小Windows发送几条消息:

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

甚至更多。

如果我想当我调整窗口, 在这里 ,我应该怎么做,以重新定位的孩子吗?
我在寻找“最佳”的方法-即用最少的疑难杂症的和最不闪烁的方法。

目前的方法是进行内部的所有重新定位WM_NCCALCSIZE ,使用DeferWindowPos
不过,我也试着处理这里面WM_WINDOWPOSCHANGED ......但无论身在何处我处理一下,好像总是有至少一个 “瞬间”的时候,窗口中画了一个中间状态,其中窗口的大小有改变,但它的内容还有待调整。

想另一个作用,以避免:移动一个孩子后,它已经感动。 我不希望用户看到控制滑了下来,然后回来 ,因为我的改变-它应该有尽可能少的瞬态效应越好。

我在做正确吗? 有没有更好的地方,我可以躺在窗外的孩子?

Answer 1:

你应该重新定位在WM_SIZE消息的窗口,因为这是最后一个完成它的任务窗口的前临危......重新定位,你可以使用窗口的MoveWindow



文章来源: When (and how) to lay out the children of a Win32 window in response to a resize?