写了下面的程序,测试下父窗口设置 WS_CLIPCHILDREN 前后,对父窗口调用 RedrawWindow 或 InvalidateRect 对子窗口刷新造成的影响
操作 | 有WS_CLIPCHILDREN | 无WS_CLIPCHILDREN |
InvalidateRect | 对子窗口无影响 | 父窗口的无效区域增加 子窗口的无效区域增加 且无效区域坐标相同(屏幕坐标系下) |
RedrawWindow FLAG: RDW_INVALIDATE | 对子窗口无影响 | 父窗口的无效区域增加 子窗口的无效区域增加 且无效区域坐标相同(屏幕坐标系下) |
RedrawWindow FLAG: RDW_INVALIDATE|RDW_ALLCHILDREN 例:RedrawWindow(&rect, NULL, RDW_INVALIDATE|RDW_ALLCHILDREN); | 父窗口的无效区域增加 子窗口的无效区域增加 且无效区域坐标相同(屏幕坐标系下) | 父窗口的无效区域增加 子窗口的无效区域增加 且无效区域坐标相同(屏幕坐标系下) |
RedrawWindow FLAG: RDW_INVALIDATE|RDW_NOCHILDREN | 父窗口的无效区域增加 对子窗口无影响 | 父窗口的无效区域增加 对子窗口无影响 |
其他窗口在父子窗口上移动 | 父窗口会接收到WM_PAINT消息,但是无效区域是 父窗口 排除子窗口后的区域和 其他当前移动的窗口区域的交集 子窗口会接收到wm_paint消息,无效区域是 子窗口和当前移动的窗口的区域的交集 | 父窗口会接收到WM_PAINT消息,但是无效区域是 父窗口当前移动的窗口区域的交集
子窗口会接收到wm_paint消息,无效区域是 子窗口和当前移动的窗口的区域的交集 |