Child Window Update Region
孩子窗口是 具有WS_CHILD或WS_CHILDWINDOW类型的窗口。
想其他窗口一样, 孩子窗口通过接收WM_PAINT消息,重新绘制窗口。
每个孩子窗口都有一个更新区域, 可能是整个系统 或 特定区域。
孩子窗口的 更新和可见区域 受父窗口影响。 而其他窗口不具备这样的属性。 系统经常设置还子窗口的更新区域 当设置了父窗口更新区域的时候, 当父亲窗口接收到WM_PAINT的时候,同样会使孩子窗口接收到WM_PAINT.
系统限制孩子窗口的可见区域为 在父亲窗口内的部分, 而在父亲窗口外的部分则被剪切掉了(不显示)。
1种更新情况
系统设置孩子的区域进行更新,在任何父亲要更新的区域涵盖孩子部分区域的时候。 举个例子, 系统第一次发送WM_PAINT消息给父窗口,然后发送给孩子窗口, 允许孩子窗口 回复任何 被父亲覆盖重绘的部分。
1种不更新情况
系统不会因为孩子的窗口重绘, 而给父亲窗口发送WM_PAINT消息。
同样,系统不会因为 父亲窗口中 被压在 孩子底下的部分重绘 而发送给孩子窗口WM_PAINT消息。
1种不更新情况
应用程序 能够阻止 孩子窗口的区域更新, 通过设置父亲窗口属性为WS_CLIPCHILDREN属性。
1种兄弟间更新情况+更新顺序(这决定了谁覆盖谁)
孩子窗口 更新 和 可见 区域经常受孩子窗口的 兄弟影响。 兄弟窗口指同一个副窗口下的所有窗口。 如果一个子窗口 覆盖到了另一个子窗口, 当其中之一被更新的时候, WM_PAINT会发送给他们两个。 WM_PAINT会根据position的Z序列的逆序进行WM_PAINT的发送更新。
1种解决兄弟覆盖的方法
兄弟窗口不会自动修剪。 所以可能会覆盖到子窗口, 但是可以通过设定窗口的WS_CLIPSIBINGS属性来避免覆盖。