Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Scroll windows and DCs |
| 3 | * |
| 4 | * Copyright David W. Metcalfe, 1993 |
Alexandre Julliard | 8cc3a5e | 1996-08-11 15:49:51 +0000 | [diff] [blame] | 5 | * Alex Korobka 1995,1996 |
Alexandre Julliard | d471965 | 1995-12-12 18:49:11 +0000 | [diff] [blame] | 6 | * |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 7 | * |
| 8 | */ |
| 9 | |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 10 | #include <stdlib.h> |
Patrik Stridvall | b87fe2e | 1999-04-01 08:16:08 +0000 | [diff] [blame] | 11 | |
Jeremy White | d3e22d9 | 2000-02-10 19:03:02 +0000 | [diff] [blame] | 12 | #include "windef.h" |
| 13 | #include "wingdi.h" |
Patrik Stridvall | 1ed4ecf | 1999-06-26 14:58:24 +0000 | [diff] [blame] | 14 | #include "wine/winuser16.h" |
Marcus Meissner | 61afa33 | 1999-02-22 10:16:00 +0000 | [diff] [blame] | 15 | #include "winuser.h" |
Alexandre Julliard | d471965 | 1995-12-12 18:49:11 +0000 | [diff] [blame] | 16 | #include "win.h" |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 17 | #include "gdi.h" |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 18 | #include "dce.h" |
Alexandre Julliard | 8cc3a5e | 1996-08-11 15:49:51 +0000 | [diff] [blame] | 19 | #include "region.h" |
Alexandre Julliard | e3fe9f2 | 2001-05-10 03:23:59 +0000 | [diff] [blame] | 20 | #include "user.h" |
Alexandre Julliard | 359f497e | 1999-07-04 16:02:24 +0000 | [diff] [blame] | 21 | #include "debugtools.h" |
Alexandre Julliard | d471965 | 1995-12-12 18:49:11 +0000 | [diff] [blame] | 22 | |
Alexandre Julliard | 2239abb | 2000-11-05 02:05:07 +0000 | [diff] [blame] | 23 | DEFAULT_DEBUG_CHANNEL(scroll); |
Patrik Stridvall | b4b9fae | 1999-04-19 14:56:29 +0000 | [diff] [blame] | 24 | |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 25 | /************************************************************************* |
Patrik Stridvall | 0c61028 | 2001-01-25 22:22:21 +0000 | [diff] [blame] | 26 | * ScrollWindow (USER.61) |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 27 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 28 | void WINAPI ScrollWindow16(HWND16 hwnd, INT16 dx, INT16 dy, const RECT16 *rect, |
| 29 | const RECT16 *clipRect ) |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 30 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 31 | RECT rect32, clipRect32; |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 32 | |
| 33 | if (rect) CONV_RECT16TO32( rect, &rect32 ); |
| 34 | if (clipRect) CONV_RECT16TO32( clipRect, &clipRect32 ); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 35 | ScrollWindow( hwnd, dx, dy, rect ? &rect32 : NULL, |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 36 | clipRect ? &clipRect32 : NULL ); |
| 37 | } |
| 38 | |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 39 | /************************************************************************* |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 40 | * ScrollWindow (USER32.@) |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 41 | * |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 42 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 43 | BOOL WINAPI ScrollWindow( HWND hwnd, INT dx, INT dy, |
| 44 | const RECT *rect, const RECT *clipRect ) |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 45 | { |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 46 | return |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 47 | (ERROR != ScrollWindowEx( hwnd, dx, dy, rect, clipRect, 0, NULL, |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 48 | (rect ? 0 : SW_SCROLLCHILDREN) | |
| 49 | SW_INVALIDATE )); |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 50 | } |
| 51 | |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 52 | /************************************************************************* |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 53 | * ScrollDC (USER.221) |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 54 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 55 | BOOL16 WINAPI ScrollDC16( HDC16 hdc, INT16 dx, INT16 dy, const RECT16 *rect, |
| 56 | const RECT16 *cliprc, HRGN16 hrgnUpdate, |
| 57 | LPRECT16 rcUpdate ) |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 58 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 59 | RECT rect32, clipRect32, rcUpdate32; |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 60 | BOOL16 ret; |
| 61 | |
| 62 | if (rect) CONV_RECT16TO32( rect, &rect32 ); |
| 63 | if (cliprc) CONV_RECT16TO32( cliprc, &clipRect32 ); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 64 | ret = ScrollDC( hdc, dx, dy, rect ? &rect32 : NULL, |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 65 | cliprc ? &clipRect32 : NULL, hrgnUpdate, &rcUpdate32 ); |
| 66 | if (rcUpdate) CONV_RECT32TO16( &rcUpdate32, rcUpdate ); |
| 67 | return ret; |
| 68 | } |
| 69 | |
| 70 | |
| 71 | /************************************************************************* |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 72 | * ScrollDC (USER32.@) |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 73 | * |
Pascal Lessard | 83f39cf | 1999-02-25 16:35:22 +0000 | [diff] [blame] | 74 | * Only the hrgnUpdate is return in device coordinate. |
| 75 | * rcUpdate must be returned in logical coordinate to comply with win API. |
| 76 | * |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 77 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 78 | BOOL WINAPI ScrollDC( HDC hdc, INT dx, INT dy, const RECT *rc, |
| 79 | const RECT *prLClip, HRGN hrgnUpdate, |
| 80 | LPRECT rcUpdate ) |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 81 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 82 | RECT rect, rClip, rSrc; |
| 83 | POINT src, dest; |
Alexandre Julliard | 2a2321b | 2000-08-19 21:38:55 +0000 | [diff] [blame] | 84 | DC *dc = DC_GetDCUpdate( hdc ); |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 85 | |
Alexandre Julliard | 359f497e | 1999-07-04 16:02:24 +0000 | [diff] [blame] | 86 | TRACE("%04x %d,%d hrgnUpdate=%04x rcUpdate = %p cliprc = (%d,%d-%d,%d), rc=(%d,%d-%d,%d)\n", |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 87 | (HDC16)hdc, dx, dy, hrgnUpdate, rcUpdate, |
| 88 | prLClip ? prLClip->left : 0, prLClip ? prLClip->top : 0, prLClip ? prLClip->right : 0, prLClip ? prLClip->bottom : 0, |
| 89 | rc ? rc->left : 0, rc ? rc->top : 0, rc ? rc->right : 0, rc ? rc->bottom : 0 ); |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 90 | |
Alexandre Julliard | 8cc3a5e | 1996-08-11 15:49:51 +0000 | [diff] [blame] | 91 | if ( !dc || !hdc ) return FALSE; |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 92 | |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 93 | /* |
Alexandre Julliard | 54c2711 | 1998-03-29 19:44:57 +0000 | [diff] [blame] | 94 | TRACE(scroll,"\t[wndOrgX=%i, wndExtX=%i, vportOrgX=%i, vportExtX=%i]\n", |
| 95 | dc->wndOrgX, dc->wndExtX, dc->vportOrgX, dc->vportExtX ); |
| 96 | TRACE(scroll,"\t[wndOrgY=%i, wndExtY=%i, vportOrgY=%i, vportExtY=%i]\n", |
| 97 | dc->wndOrgY, dc->wndExtY, dc->vportOrgY, dc->vportExtY ); |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 98 | */ |
Alexandre Julliard | e2bfa4c | 1996-05-16 18:21:06 +0000 | [diff] [blame] | 99 | |
Ulrich Weigand | 409eb44 | 2000-10-23 00:35:28 +0000 | [diff] [blame] | 100 | /* compute device clipping region (in device coordinates) */ |
Alexandre Julliard | 8cc3a5e | 1996-08-11 15:49:51 +0000 | [diff] [blame] | 101 | |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 102 | if ( rc ) |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 103 | rect = *rc; |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 104 | else /* maybe we should just return FALSE? */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 105 | GetClipBox( hdc, &rect ); |
Alexandre Julliard | 1e9ac79 | 1996-06-06 18:38:27 +0000 | [diff] [blame] | 106 | |
Ulrich Weigand | 409eb44 | 2000-10-23 00:35:28 +0000 | [diff] [blame] | 107 | LPtoDP( hdc, (LPPOINT)&rect, 2 ); |
| 108 | |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 109 | if (prLClip) |
Ulrich Weigand | 409eb44 | 2000-10-23 00:35:28 +0000 | [diff] [blame] | 110 | { |
| 111 | rClip = *prLClip; |
| 112 | LPtoDP( hdc, (LPPOINT)&rClip, 2 ); |
| 113 | IntersectRect( &rClip, &rect, &rClip ); |
| 114 | } |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 115 | else |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 116 | rClip = rect; |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 117 | |
Ulrich Weigand | 409eb44 | 2000-10-23 00:35:28 +0000 | [diff] [blame] | 118 | dx = XLPTODP ( dc, rect.left + dx ) - XLPTODP ( dc, rect.left ); |
| 119 | dy = YLPTODP ( dc, rect.top + dy ) - YLPTODP ( dc, rect.top ); |
| 120 | |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 121 | rSrc = rClip; |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 122 | OffsetRect( &rSrc, -dx, -dy ); |
| 123 | IntersectRect( &rSrc, &rSrc, &rect ); |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 124 | |
Alexandre Julliard | 2239abb | 2000-11-05 02:05:07 +0000 | [diff] [blame] | 125 | if(dc->hVisRgn) |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 126 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 127 | if (!IsRectEmpty(&rSrc)) |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 128 | { |
| 129 | dest.x = (src.x = rSrc.left) + dx; |
| 130 | dest.y = (src.y = rSrc.top) + dy; |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 131 | |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 132 | /* copy bits */ |
Ulrich Weigand | 409eb44 | 2000-10-23 00:35:28 +0000 | [diff] [blame] | 133 | |
| 134 | DPtoLP( hdc, (LPPOINT)&rSrc, 2 ); |
| 135 | DPtoLP( hdc, &src, 1 ); |
| 136 | DPtoLP( hdc, &dest, 1 ); |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 137 | |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 138 | if (!BitBlt( hdc, dest.x, dest.y, |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 139 | rSrc.right - rSrc.left, rSrc.bottom - rSrc.top, |
| 140 | hdc, src.x, src.y, SRCCOPY)) |
| 141 | { |
Alexandre Julliard | 2a2321b | 2000-08-19 21:38:55 +0000 | [diff] [blame] | 142 | GDI_ReleaseObj( hdc ); |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 143 | return FALSE; |
| 144 | } |
| 145 | } |
| 146 | |
| 147 | /* compute update areas */ |
| 148 | |
| 149 | if (hrgnUpdate || rcUpdate) |
| 150 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 151 | HRGN hrgn = |
| 152 | (hrgnUpdate) ? hrgnUpdate : CreateRectRgn( 0,0,0,0 ); |
| 153 | HRGN hrgn2; |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 154 | |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 155 | hrgn2 = CreateRectRgnIndirect( &rect ); |
Alexandre Julliard | 2239abb | 2000-11-05 02:05:07 +0000 | [diff] [blame] | 156 | OffsetRgn( hrgn2, dc->DCOrgX, dc->DCOrgY ); |
| 157 | CombineRgn( hrgn2, hrgn2, dc->hVisRgn, RGN_AND ); |
| 158 | OffsetRgn( hrgn2, -dc->DCOrgX, -dc->DCOrgY ); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 159 | SetRectRgn( hrgn, rClip.left, rClip.top, |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 160 | rClip.right, rClip.bottom ); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 161 | CombineRgn( hrgn, hrgn, hrgn2, RGN_AND ); |
| 162 | OffsetRgn( hrgn2, dx, dy ); |
| 163 | CombineRgn( hrgn, hrgn, hrgn2, RGN_DIFF ); |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 164 | |
Pascal Lessard | 83f39cf | 1999-02-25 16:35:22 +0000 | [diff] [blame] | 165 | if( rcUpdate ) |
| 166 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 167 | GetRgnBox( hrgn, rcUpdate ); |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 168 | |
Patrik Stridvall | 0f8bc5b | 1999-04-22 16:27:50 +0000 | [diff] [blame] | 169 | /* Put the rcUpdate in logical coordinate */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 170 | DPtoLP( hdc, (LPPOINT)rcUpdate, 2 ); |
Pascal Lessard | 83f39cf | 1999-02-25 16:35:22 +0000 | [diff] [blame] | 171 | } |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 172 | if (!hrgnUpdate) DeleteObject( hrgn ); |
| 173 | DeleteObject( hrgn2 ); |
Pascal Lessard | 83f39cf | 1999-02-25 16:35:22 +0000 | [diff] [blame] | 174 | |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 175 | } |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 176 | } |
Jerome Vouillon | 1da6dba | 1999-02-14 13:32:13 +0000 | [diff] [blame] | 177 | else |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 178 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 179 | if (hrgnUpdate) SetRectRgn(hrgnUpdate, 0, 0, 0, 0); |
| 180 | if (rcUpdate) SetRectEmpty(rcUpdate); |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 181 | } |
| 182 | |
Alexandre Julliard | 2a2321b | 2000-08-19 21:38:55 +0000 | [diff] [blame] | 183 | GDI_ReleaseObj( hdc ); |
Alexandre Julliard | 3ed37e0 | 1994-11-07 18:20:42 +0000 | [diff] [blame] | 184 | return TRUE; |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 185 | } |
| 186 | |
| 187 | |
| 188 | /************************************************************************* |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 189 | * ScrollWindowEx (USER.319) |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 190 | */ |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 191 | INT16 WINAPI ScrollWindowEx16( HWND16 hwnd, INT16 dx, INT16 dy, |
| 192 | const RECT16 *rect, const RECT16 *clipRect, |
| 193 | HRGN16 hrgnUpdate, LPRECT16 rcUpdate, |
| 194 | UINT16 flags ) |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 195 | { |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 196 | RECT rect32, clipRect32, rcUpdate32; |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 197 | BOOL16 ret; |
| 198 | |
| 199 | if (rect) CONV_RECT16TO32( rect, &rect32 ); |
| 200 | if (clipRect) CONV_RECT16TO32( clipRect, &clipRect32 ); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 201 | ret = ScrollWindowEx( hwnd, dx, dy, rect ? &rect32 : NULL, |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 202 | clipRect ? &clipRect32 : NULL, hrgnUpdate, |
Alexandre Julliard | 9ea19e5 | 1997-01-01 17:29:55 +0000 | [diff] [blame] | 203 | (rcUpdate) ? &rcUpdate32 : NULL, flags ); |
Alexandre Julliard | 75d86e1 | 1996-11-17 18:59:11 +0000 | [diff] [blame] | 204 | if (rcUpdate) CONV_RECT32TO16( &rcUpdate32, rcUpdate ); |
| 205 | return ret; |
| 206 | } |
| 207 | |
| 208 | |
| 209 | /************************************************************************* |
Patrik Stridvall | 2ece70e | 2000-12-22 01:38:01 +0000 | [diff] [blame] | 210 | * ScrollWindowEx (USER32.@) |
Alexandre Julliard | 670cdc4 | 1997-08-24 16:00:30 +0000 | [diff] [blame] | 211 | * |
| 212 | * NOTE: Use this function instead of ScrollWindow32 |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 213 | */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 214 | INT WINAPI ScrollWindowEx( HWND hwnd, INT dx, INT dy, |
| 215 | const RECT *rect, const RECT *clipRect, |
| 216 | HRGN hrgnUpdate, LPRECT rcUpdate, |
| 217 | UINT flags ) |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 218 | { |
Alexandre Julliard | e3fe9f2 | 2001-05-10 03:23:59 +0000 | [diff] [blame] | 219 | if (USER_Driver.pScrollWindowEx) |
| 220 | return USER_Driver.pScrollWindowEx( hwnd, dx, dy, rect, clipRect, |
| 221 | hrgnUpdate, rcUpdate, flags ); |
| 222 | return ERROR; |
Alexandre Julliard | e399fc3 | 1993-11-24 17:08:56 +0000 | [diff] [blame] | 223 | } |