Handle WM_PRINTCLIENT.
Don't use SelectClipRgn in WM_PRINTCLIENT.

diff --git a/dlls/comctl32/animate.c b/dlls/comctl32/animate.c
index 6d06d22..3c2c648 100644
--- a/dlls/comctl32/animate.c
+++ b/dlls/comctl32/animate.c
@@ -899,6 +899,7 @@
     case WM_TIMER:
         return ANIMATE_Timer(infoPtr);
 
+    case WM_PRINTCLIENT:
     case WM_PAINT:
         {
             /* the animation isn't playing, or has not decompressed
diff --git a/dlls/comctl32/datetime.c b/dlls/comctl32/datetime.c
index f024207..83d53af 100644
--- a/dlls/comctl32/datetime.c
+++ b/dlls/comctl32/datetime.c
@@ -1284,6 +1284,7 @@
     case WM_GETDLGCODE:
         return DLGC_WANTARROWS | DLGC_WANTCHARS;
 
+    case WM_PRINTCLIENT:
     case WM_PAINT:
         return DATETIME_Paint (infoPtr, (HDC)wParam);
 
diff --git a/dlls/comctl32/header.c b/dlls/comctl32/header.c
index ae611b9..522aa81 100644
--- a/dlls/comctl32/header.c
+++ b/dlls/comctl32/header.c
@@ -1717,6 +1717,7 @@
         case WM_THEMECHANGED:
             return HEADER_ThemeChanged (hwnd);
 
+        case WM_PRINTCLIENT:
         case WM_PAINT:
             return HEADER_Paint (hwnd, wParam);
 
diff --git a/dlls/comctl32/hotkey.c b/dlls/comctl32/hotkey.c
index ab8d746..6359164 100644
--- a/dlls/comctl32/hotkey.c
+++ b/dlls/comctl32/hotkey.c
@@ -516,6 +516,7 @@
 	case WM_NCCREATE:
 	    return HOTKEY_NCCreate (hwnd, (LPCREATESTRUCTW)lParam);
 
+	case WM_PRINTCLIENT:
 	case WM_PAINT:
 	    HOTKEY_Paint(infoPtr, (HDC)wParam);
 	    return 0;
diff --git a/dlls/comctl32/monthcal.c b/dlls/comctl32/monthcal.c
index 4214eed..340b681 100644
--- a/dlls/comctl32/monthcal.c
+++ b/dlls/comctl32/monthcal.c
@@ -2007,6 +2007,7 @@
   case WM_LBUTTONUP:
     return MONTHCAL_LButtonUp(infoPtr, lParam);
 
+  case WM_PRINTCLIENT:
   case WM_PAINT:
     return MONTHCAL_Paint(infoPtr, wParam);
 
diff --git a/dlls/comctl32/pager.c b/dlls/comctl32/pager.c
index 971da4e..cd25159 100644
--- a/dlls/comctl32/pager.c
+++ b/dlls/comctl32/pager.c
@@ -34,6 +34,8 @@
  *      PGS_DRAGNDROP
  *    Notifications:
  *      PGN_HOTITEMCHANGE
+ *    Messages:
+ *      WM_PRINT and/or WM_PRINTCLIENT
  *
  * TESTING:
  *    Tested primarily with the controlspy Pager application.
diff --git a/dlls/comctl32/progress.c b/dlls/comctl32/progress.c
index a6e20e5..eb0b11a 100644
--- a/dlls/comctl32/progress.c
+++ b/dlls/comctl32/progress.c
@@ -627,6 +627,7 @@
     case WM_SETFONT:
         return (LRESULT)PROGRESS_SetFont(infoPtr, (HFONT)wParam, (BOOL)lParam);
 
+    case WM_PRINTCLIENT:
     case WM_PAINT:
         return PROGRESS_Paint (infoPtr, (HDC)wParam);
 
diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c
index 783ae3e..08c55b8 100644
--- a/dlls/comctl32/propsheet.c
+++ b/dlls/comctl32/propsheet.c
@@ -3455,6 +3455,7 @@
       return TRUE;
     }
 
+    case WM_PRINTCLIENT:
     case WM_PAINT:
       PROPSHEET_Paint(hwnd, (HDC)wParam);
       return TRUE;
diff --git a/dlls/comctl32/rebar.c b/dlls/comctl32/rebar.c
index 3f167ba..61806f4 100644
--- a/dlls/comctl32/rebar.c
+++ b/dlls/comctl32/rebar.c
@@ -50,7 +50,6 @@
  *   - WM_LBUTTONDBLCLK
  *   - WM_MEASUREITEM
  *   - WM_PALETTECHANGED
- *   - WM_PRINTCLIENT
  *   - WM_QUERYNEWPALETTE
  *   - WM_RBUTTONDOWN
  *   - WM_RBUTTONUP
@@ -4768,11 +4767,11 @@
         case WM_NOTIFYFORMAT:
 	    return REBAR_NotifyFormat (infoPtr, wParam, lParam);
 
+	case WM_PRINTCLIENT:
 	case WM_PAINT:
 	    return REBAR_Paint (infoPtr, wParam, lParam);
 
 /*      case WM_PALETTECHANGED: supported according to ControlSpy */
-/*      case WM_PRINTCLIENT:    supported according to ControlSpy */
 /*      case WM_QUERYNEWPALETTE:supported according to ControlSpy */
 /*      case WM_RBUTTONDOWN:    supported according to ControlSpy */
 /*      case WM_RBUTTONUP:      supported according to ControlSpy */
diff --git a/dlls/comctl32/status.c b/dlls/comctl32/status.c
index c730400..7c86815 100644
--- a/dlls/comctl32/status.c
+++ b/dlls/comctl32/status.c
@@ -1342,6 +1342,7 @@
 	case WM_NOTIFYFORMAT:
 	    return STATUSBAR_NotifyFormat(infoPtr, (HWND)wParam, (INT)lParam);
 
+	case WM_PRINTCLIENT:
 	case WM_PAINT:
 	    return STATUSBAR_WMPaint (infoPtr, (HDC)wParam);
 
diff --git a/dlls/comctl32/syslink.c b/dlls/comctl32/syslink.c
index 12a0605..084a567 100644
--- a/dlls/comctl32/syslink.c
+++ b/dlls/comctl32/syslink.c
@@ -1463,6 +1463,7 @@
         return DefWindowProcW( hwnd, message, wParam, lParam );
 
     switch(message) {
+    case WM_PRINTCLIENT:
     case WM_PAINT:
         return SYSLINK_Paint (infoPtr, (HDC)wParam);
 
diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c
index e36ddf6..dd9dbe5 100644
--- a/dlls/comctl32/tab.c
+++ b/dlls/comctl32/tab.c
@@ -3283,6 +3283,7 @@
     case WM_MOUSEMOVE:
       return TAB_MouseMove (infoPtr, wParam, lParam);
 
+    case WM_PRINTCLIENT:
     case WM_PAINT:
       return TAB_Paint (infoPtr, (HDC)wParam);
 
diff --git a/dlls/comctl32/toolbar.c b/dlls/comctl32/toolbar.c
index cf6a03b..64be7ec 100644
--- a/dlls/comctl32/toolbar.c
+++ b/dlls/comctl32/toolbar.c
@@ -7234,6 +7234,7 @@
 	case WM_NOTIFYFORMAT:
 	    return TOOLBAR_NotifyFormat (infoPtr, wParam, lParam);
 
+	case WM_PRINTCLIENT:
 	case WM_PAINT:
 	    return TOOLBAR_Paint (hwnd, wParam);
 
diff --git a/dlls/comctl32/tooltips.c b/dlls/comctl32/tooltips.c
index e641aaa..b738a4e 100644
--- a/dlls/comctl32/tooltips.c
+++ b/dlls/comctl32/tooltips.c
@@ -2782,6 +2782,7 @@
 	case WM_NOTIFYFORMAT:
 	    return TOOLTIPS_NotifyFormat (hwnd, wParam, lParam);
 
+	case WM_PRINTCLIENT:
 	case WM_PAINT:
 	    return TOOLTIPS_Paint (hwnd, wParam, lParam);
 
diff --git a/dlls/comctl32/trackbar.c b/dlls/comctl32/trackbar.c
index 5b113ec..7094e04 100644
--- a/dlls/comctl32/trackbar.c
+++ b/dlls/comctl32/trackbar.c
@@ -1878,6 +1878,7 @@
     case WM_MOUSEMOVE:
         return TRACKBAR_MouseMove (infoPtr, wParam, (SHORT)LOWORD(lParam), (SHORT)HIWORD(lParam));
 
+    case WM_PRINTCLIENT:
     case WM_PAINT:
         return TRACKBAR_Paint (infoPtr, (HDC)wParam);
 
diff --git a/dlls/comctl32/treeview.c b/dlls/comctl32/treeview.c
index e6cd167..c148d83 100644
--- a/dlls/comctl32/treeview.c
+++ b/dlls/comctl32/treeview.c
@@ -5629,11 +5629,10 @@
     case WM_NOTIFYFORMAT:
 	return TREEVIEW_NotifyFormat(infoPtr, (HWND)wParam, (UINT)lParam);
 
+    case WM_PRINTCLIENT:
     case WM_PAINT:
 	return TREEVIEW_Paint(infoPtr, wParam);
 
-	/* WM_PRINTCLIENT */
-
     case WM_RBUTTONDOWN:
 	return TREEVIEW_RButtonDown(infoPtr, lParam);
 
diff --git a/dlls/comctl32/updown.c b/dlls/comctl32/updown.c
index d889881..cda2668 100644
--- a/dlls/comctl32/updown.c
+++ b/dlls/comctl32/updown.c
@@ -934,6 +934,7 @@
 		return UPDOWN_KeyPressed(infoPtr, (int)wParam);
 	    break;
 
+	case WM_PRINTCLIENT:
 	case WM_PAINT:
 	    return UPDOWN_Paint (infoPtr, (HDC)wParam);
 
diff --git a/dlls/user/button.c b/dlls/user/button.c
index a723a84..5d56db7 100644
--- a/dlls/user/button.c
+++ b/dlls/user/button.c
@@ -279,6 +279,7 @@
         }
         return 1;
 
+    case WM_PRINTCLIENT:
     case WM_PAINT:
         if (btnPaintFunc[btn_type])
         {
@@ -777,7 +778,6 @@
 {
     RECT     rc, focus_rect, r;
     UINT     dtFlags, uState;
-    HRGN     hRgn;
     HPEN     hOldPen;
     HBRUSH   hOldBrush;
     INT      oldBkMode;
@@ -834,16 +834,13 @@
     if (pushedState)
        OffsetRect(&r, 1, 1);
 
-    hRgn = CreateRectRgn(rc.left, rc.top, rc.right, rc.bottom);
-    SelectClipRgn(hDC, hRgn);
+    IntersectClipRect(hDC, rc.left, rc.top, rc.right, rc.bottom);
 
     oldTxtColor = SetTextColor( hDC, GetSysColor(COLOR_BTNTEXT) );
 
     BUTTON_DrawLabel(hwnd, hDC, dtFlags, &r);
 
     SetTextColor( hDC, oldTxtColor );
-    SelectClipRgn(hDC, 0);
-    DeleteObject(hRgn);
 
     if (state & BUTTON_HASFOCUS)
     {
@@ -868,7 +865,6 @@
     HBRUSH hBrush;
     int delta;
     UINT dtFlags;
-    HRGN hRgn;
     HFONT hFont;
     LONG state = get_button_state( hwnd );
     LONG style = GetWindowLongW( hwnd, GWL_STYLE );
@@ -970,9 +966,8 @@
 
     if (dtFlags == (UINT)-1L) /* Noting to draw */
 	return;
-    hRgn = CreateRectRgn(client.left, client.top, client.right, client.bottom);
-    SelectClipRgn(hDC, hRgn);
-    DeleteObject(hRgn);
+
+    IntersectClipRect(hDC, client.left, client.top, client.right, client.bottom);
 
     if (action == ODA_DRAWENTIRE)
 	BUTTON_DrawLabel(hwnd, hDC, dtFlags, &rtext);
@@ -986,7 +981,6 @@
 	IntersectRect(&rtext, &rtext, &client);
 	DrawFocusRect( hDC, &rtext );
     }
-    SelectClipRgn(hDC, 0);
 }
 
 
diff --git a/dlls/user/edit.c b/dlls/user/edit.c
index 28d8032..2d92e94 100644
--- a/dlls/user/edit.c
+++ b/dlls/user/edit.c
@@ -920,6 +920,7 @@
 		result = EDIT_WM_MouseMove(es, (short)LOWORD(lParam), (short)HIWORD(lParam));
 		break;
 
+	case WM_PRINTCLIENT:
 	case WM_PAINT:
 	        EDIT_WM_Paint(es, (HDC)wParam);
 		break;
diff --git a/dlls/user/listbox.c b/dlls/user/listbox.c
index 167effd..a7f9687 100644
--- a/dlls/user/listbox.c
+++ b/dlls/user/listbox.c
@@ -3013,6 +3013,7 @@
     case WM_GETDLGCODE:
         return DLGC_WANTARROWS | DLGC_WANTCHARS;
 
+    case WM_PRINTCLIENT:
     case WM_PAINT:
         {
             PAINTSTRUCT ps;
diff --git a/dlls/user/static.c b/dlls/user/static.c
index 65a1249..365687c 100644
--- a/dlls/user/static.c
+++ b/dlls/user/static.c
@@ -282,6 +282,7 @@
         else return unicode ? DefWindowProcW(hwnd, uMsg, wParam, lParam) :
                               DefWindowProcA(hwnd, uMsg, wParam, lParam);
 
+    case WM_PRINTCLIENT:
     case WM_PAINT:
         {
             PAINTSTRUCT ps;