Fix a bug in SetWindowPos to prevent parent from erasing its child

painting area when parent window and child window don't have
WS_CLIPCHILDREN and WS_CLIPSIBLINGS.
This commit is contained in:
Yuxi Zhang 1999-07-04 10:53:43 +00:00 committed by Alexandre Julliard
parent 526ffdc304
commit 8e35d65f06
1 changed files with 28 additions and 3 deletions

View File

@ -2821,6 +2821,11 @@ Pos: /* -----------------------------------------------------------------------
{
if( !(winpos.flags & SWP_NOREDRAW) )
{
if (wndPtr->parent == wndTemp)
{
/* Desktop does not receive wm_paint message so we use RDW_ERASENOW to erase the
the desktop window */
if( uFlags & SWP_EX_PAINTSELF )
{
PAINT_RedrawWindow( wndPtr->hwndSelf, NULL, (visRgn == 1) ? 0 : visRgn, RDW_ERASE | RDW_FRAME |
@ -2829,9 +2834,29 @@ Pos: /* -----------------------------------------------------------------------
}
else
{
PAINT_RedrawWindow( wndPtr->parent->hwndSelf, NULL, (visRgn == 1) ? 0 : visRgn, RDW_ERASE |
((winpos.flags & SWP_DEFERERASE) ? 0 : RDW_ERASENOW) | RDW_INVALIDATE |
RDW_ALLCHILDREN, RDW_EX_USEHRGN );
PAINT_RedrawWindow( wndPtr->parent->hwndSelf, NULL, (visRgn == 1) ? 0 : visRgn,
RDW_ERASE | RDW_ERASENOW | RDW_INVALIDATE | RDW_ALLCHILDREN, RDW_EX_USEHRGN );
}
}
else
{
if( uFlags & SWP_EX_PAINTSELF )
{
/* Use PAINT_RedrawWindow to explicitly force an invalidation of the window,
its parent and sibling and so on, and then update the parent window,
the non-top-level window. Rely on the system to repaint other affected
windows later on. */
PAINT_RedrawWindow( wndPtr->hwndSelf, NULL, (visRgn == 1) ? 0 : visRgn, RDW_ERASE |
RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN, RDW_EX_XYWINDOW | RDW_EX_USEHRGN );
}
else
{
PAINT_RedrawWindow( wndPtr->parent->hwndSelf, NULL, (visRgn == 1) ? 0 : visRgn,
RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN, RDW_EX_USEHRGN );
UpdateWindow( wndPtr->parent->hwndSelf);
}
}
}
if( visRgn != 1 )