儿童Windows

【勇芳软件工作室】汉化HomePreviousNext

子窗口是具有WS_CHILD或WS_CHILDWINDOW样式的窗口。像其他窗口样式一样,子窗口接收WM_PAINT消息以提示更新。每个子窗口都有一个更新区域,Windows或应用程序可以设置生成最终的WM_PAINT消息。

子窗口的更新和可见区域受到子窗口的父窗口的影响;对于其他样式的窗口,这不是真的。当Windows设置父窗口的更新区域时,窗口通常会设置子窗口的更新区域,当父窗口接收到该窗口时,子窗口将接收到WM_PAINT消息。Windows将子窗口的可见区域的位置限制在父窗口的客户区域内,并将子窗口的任何部分剪切移动到父窗口之外。

只要父窗口的更新区域的一部分包含子窗口的一部分,Windows将为子窗口设置更新区域。在这种情况下,Windows首先向父窗口发送WM_PAINT消息,然后向子窗口发送消息,允许子级还原父窗口中可能绘制的窗口的任何部分。

当孩子被设置时,Windows不会设置父级的更新区域。应用程序无法通过使子窗口无效生成父窗口的WM_PAINT消息。类似地,应用程序无法通过使完全位于子窗口下方的父级客户端区域的一部分失效来为该孩子生成一个WM_PAINT消息。在这种情况下,窗口都不会收到WM_PAINT消息。

当通过在创建父窗口时指定WS_CLIPCHILDREN样式来设置父窗口时,应用程序可以防止子窗口的更新区域被设置。设置此样式时,Windows将从父级的可见区域排除子窗口,因此忽略可能包含子窗口的更新区域的任何部分。当应用程序在父窗口中绘制时,将覆盖覆盖子窗口的任何图形都将被剪切,从而不必再向子窗口发送WM_PAINT消息。

子窗口的更新和可见区域也受到子窗口的兄弟姐妹的影响。兄弟窗口是具有共同父窗口的任何窗口。如果兄弟窗口重叠,则为一个更新区域设置会影响另一个的更新区域,导致WM_PAINT消息发送到这两个窗口。兄弟窗口按照Z位置的相反顺序接收WM_PAINT消息。给定这一点,Z顺序(顶部)最高的窗口最后收到它的WM_PAINT消息,反之亦然。

兄弟窗口不会被自动剪辑。即使正在绘制的窗口在Z顺序中具有较低的位置,一个兄弟姐妹也可以画出另一个重叠的兄弟姐妹。应用程序可以通过在创建窗口时指定WS_CLIPSIBLINGS样式来防止这种情况。当设置此样式时,如果重叠的兄弟窗口在Z顺序中具有较高的位置,则Windows会将窗口的可见区域中的重叠兄弟窗口的所有部分排除。

注意具有WS_POPUP或WS_POPUPWINDOW样式的Windows的更新和可见区域不受其父窗口的影响。