From 704f9a0abe46c14435503433b101b19063c0b3b2 Mon Sep 17 00:00:00 2001 From: Thomas Bluemel Date: Mon, 22 Dec 2003 20:44:02 +0000 Subject: [PATCH] added ros-internal NtUserSetScrollBarInfo() svn path=/trunk/; revision=7184 --- reactos/iface/addsys/w32ksvc.db | 1 + reactos/include/win32k/ntuser.h | 15 ++++++ reactos/subsys/win32k/ntuser/scrollbar.c | 67 +++++++++++++++++++++++- 3 files changed, 82 insertions(+), 1 deletion(-) diff --git a/reactos/iface/addsys/w32ksvc.db b/reactos/iface/addsys/w32ksvc.db index dbffd7b0181..29305001ae3 100644 --- a/reactos/iface/addsys/w32ksvc.db +++ b/reactos/iface/addsys/w32ksvc.db @@ -500,6 +500,7 @@ NtUserSetParent 2 NtUserSetProcessWindowStation 1 NtUserSetProp 3 NtUserSetRipFlags 2 +NtUserSetScrollBarInfo 3 NtUserSetScrollInfo 4 NtUserSetShellWindowEx 2 NtUserSetSysColors 4 diff --git a/reactos/include/win32k/ntuser.h b/reactos/include/win32k/ntuser.h index 15e97951e8e..89f8e5e0f1d 100644 --- a/reactos/include/win32k/ntuser.h +++ b/reactos/include/win32k/ntuser.h @@ -1852,6 +1852,21 @@ NtUserDereferenceWndProcHandle(WNDPROC wpHandle, WndProcHandle *Data); VOID STDCALL NtUserManualGuiCheck(LONG Check); + +typedef struct _SETSCROLLBARINFO +{ + int nTrackPos; + int reserved; + DWORD rgstate[CCHILDREN_SCROLLBAR+1]; +} SETSCROLLBARINFO, *PSETSCROLLBARINFO; + +BOOL +STDCALL +NtUserSetScrollBarInfo( + HWND hwnd, + LONG idObject, + SETSCROLLBARINFO *info); + #endif /* __WIN32K_NTUSER_H */ /* EOF */ diff --git a/reactos/subsys/win32k/ntuser/scrollbar.c b/reactos/subsys/win32k/ntuser/scrollbar.c index 29070290568..bc78fd1211d 100644 --- a/reactos/subsys/win32k/ntuser/scrollbar.c +++ b/reactos/subsys/win32k/ntuser/scrollbar.c @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id: scrollbar.c,v 1.20 2003/12/22 19:55:39 navaraf Exp $ +/* $Id: scrollbar.c,v 1.21 2003/12/22 20:44:02 weiden Exp $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel @@ -916,6 +916,71 @@ NtUserEnableScrollBar( return TRUE; } +BOOL +STDCALL +NtUserSetScrollBarInfo( + HWND hwnd, + LONG idObject, + SETSCROLLBARINFO *info) +{ + PWINDOW_OBJECT Window; + SETSCROLLBARINFO Safeinfo; + PSCROLLBARINFO sbi = NULL; + LPSCROLLINFO psi; + NTSTATUS Status; + + Window = IntGetWindowObject(hwnd); + + if(!Window) + { + SetLastWin32Error(ERROR_INVALID_WINDOW_HANDLE); + return FALSE; + } + + Status = MmCopyFromCaller(&Safeinfo, info, sizeof(SETSCROLLBARINFO)); + if(!NT_SUCCESS(Status)) + { + IntReleaseWindowObject(Window); + SetLastNtError(Status); + return FALSE; + } + + switch(idObject) + { + case OBJID_HSCROLL: + sbi = Window->pHScroll; + break; + case OBJID_VSCROLL: + sbi = Window->pVScroll; + break; + case OBJID_CLIENT: + /* FIXME */ + IntReleaseWindowObject(Window); + return FALSE; + + default: + IntReleaseWindowObject(Window); + SetLastWin32Error(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if(!sbi) + { + DPRINT1("SCROLLBARINFO structure not allocated!\n"); + IntReleaseWindowObject(Window); + return FALSE; + } + + psi = (LPSCROLLINFO)((PSCROLLBARINFO)(sbi + 1)); + + psi->nTrackPos = Safeinfo.nTrackPos; + sbi->reserved = Safeinfo.reserved; + RtlCopyMemory(&sbi->rgstate, &Safeinfo.rgstate, sizeof(Safeinfo.rgstate)); + + IntReleaseWindowObject(Window); + return TRUE; +} + DWORD STDCALL NtUserSetScrollInfo(