Rob Shearman : user32: Handle the undocumented behaviour in DefWindowProc for WM_NCACTIVATE that causes the nonclient area not to be redrawn .

Alexandre Julliard julliard at winehq.org
Wed Mar 19 07:28:09 CDT 2008


Module: wine
Branch: master
Commit: 076c6fb550996f59ad678886d7497a0cfddd10ca
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=076c6fb550996f59ad678886d7497a0cfddd10ca

Author: Rob Shearman <rob at codeweavers.com>
Date:   Tue Mar 18 12:06:59 2008 +0000

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.

---

 dlls/user32/controls.h  |    2 +-
 dlls/user32/defwnd.c    |    2 +-
 dlls/user32/nonclient.c |   16 +++++++++++-----
 3 files changed, 13 insertions(+), 7 deletions(-)

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 @@ extern UINT MENU_FindSubMenu( HMENU *hmenu, HMENU hSubTarget ) DECLSPEC_HIDDEN;
 
 /* 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 @@ static LRESULT DEFWND_DefWinProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPa
         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 @@ LRESULT NC_HandleNCPaint( HWND hwnd , HRGN clip)
  *
  * 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 @@ LRESULT NC_HandleNCActivate( HWND hwnd, WPARAM wParam )
     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;
 }




More information about the wine-cvs mailing list