user32: Handle the undocumented behaviour in DefWindowProc for WM_NCACTIVATE that causes the nonclient area not to be redrawn.
If the lParam is 0xffffffff then the nonclient area is not redrawn.
diff --git a/dlls/user32/controls.h b/dlls/user32/controls.h
index 4bfe7fd..dbec147 100644
--- a/dlls/user32/controls.h
+++ b/dlls/user32/controls.h
@@ -90,7 +90,7 @@
/* nonclient area */
extern LRESULT NC_HandleNCPaint( HWND hwnd , HRGN clip) DECLSPEC_HIDDEN;
-extern LRESULT NC_HandleNCActivate( HWND hwnd, WPARAM wParam ) DECLSPEC_HIDDEN;
+extern LRESULT NC_HandleNCActivate( HWND hwnd, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN;
extern LRESULT NC_HandleNCCalcSize( HWND hwnd, RECT *winRect ) DECLSPEC_HIDDEN;
extern LRESULT NC_HandleNCHitTest( HWND hwnd, POINT pt ) DECLSPEC_HIDDEN;
extern LRESULT NC_HandleNCLButtonDown( HWND hwnd, WPARAM wParam, LPARAM lParam ) DECLSPEC_HIDDEN;
diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c
index 53caf12..b1dc739 100644
--- a/dlls/user32/defwnd.c
+++ b/dlls/user32/defwnd.c
@@ -386,7 +386,7 @@
break;
case WM_NCACTIVATE:
- return NC_HandleNCActivate( hwnd, wParam );
+ return NC_HandleNCActivate( hwnd, wParam, lParam );
case WM_NCDESTROY:
{
diff --git a/dlls/user32/nonclient.c b/dlls/user32/nonclient.c
index 4d1191b..8deb698 100644
--- a/dlls/user32/nonclient.c
+++ b/dlls/user32/nonclient.c
@@ -1123,7 +1123,7 @@
*
* Handle a WM_NCACTIVATE message. Called from DefWindowProc().
*/
-LRESULT NC_HandleNCActivate( HWND hwnd, WPARAM wParam )
+LRESULT NC_HandleNCActivate( HWND hwnd, WPARAM wParam, LPARAM lParam )
{
WND* wndPtr = WIN_GetPtr( hwnd );
@@ -1138,10 +1138,16 @@
else wndPtr->flags &= ~WIN_NCACTIVATED;
WIN_ReleasePtr( wndPtr );
- if (IsIconic(hwnd))
- WINPOS_RedrawIconTitle( hwnd );
- else
- NC_DoNCPaint( hwnd, (HRGN)1, FALSE );
+ /* This isn't documented but is reproducible in at least XP SP2 and
+ * Outlook 2007 depends on it
+ */
+ if (lParam != -1)
+ {
+ if (IsIconic(hwnd))
+ WINPOS_RedrawIconTitle( hwnd );
+ else
+ NC_DoNCPaint( hwnd, (HRGN)1, FALSE );
+ }
return TRUE;
}