diff --git a/dlls/user32/painting.c b/dlls/user32/painting.c index 9f02a0334bb..e7ce2ec6b89 100644 --- a/dlls/user32/painting.c +++ b/dlls/user32/painting.c @@ -1202,6 +1202,12 @@ BOOL WINAPI RedrawWindow( HWND hwnd, const RECT *rect, HRGN hrgn, UINT flags ) */ BOOL WINAPI UpdateWindow( HWND hwnd ) { + if (!hwnd) + { + SetLastError( ERROR_INVALID_WINDOW_HANDLE ); + return FALSE; + } + return RedrawWindow( hwnd, NULL, 0, RDW_UPDATENOW | RDW_ALLCHILDREN ); } diff --git a/dlls/user32/tests/msg.c b/dlls/user32/tests/msg.c index 6717e2e9f8b..76d46d0e159 100644 --- a/dlls/user32/tests/msg.c +++ b/dlls/user32/tests/msg.c @@ -6161,6 +6161,16 @@ static void test_paint_messages(void) flush_events(); ok_sequence( WmEmptySeq, "WmEmptySeq", FALSE ); + trace("testing UpdateWindow(NULL)\n"); + SetLastError(0xdeadbeef); + ok(!UpdateWindow(NULL), "UpdateWindow(NULL) should fail\n"); + ok(GetLastError() == ERROR_INVALID_WINDOW_HANDLE || + broken( GetLastError() == 0xdeadbeef ) /* win9x */, + "wrong error code %d\n", GetLastError()); + check_update_rgn( hwnd, 0 ); + flush_events(); + ok_sequence( WmEmptySeq, "WmEmptySeq", FALSE ); + /* now with frame */ SetRectRgn( hrgn, -5, -5, 20, 20 );