Index: reactos/win32ss/user/ntuser/scrollbar.c =================================================================== --- reactos/win32ss/user/ntuser/scrollbar.c (revision 74978) +++ reactos/win32ss/user/ntuser/scrollbar.c (working copy) @@ -624,24 +624,44 @@ if ( co_UserShowScrollBar(Window, nBar, TRUE, TRUE) ) return lpsi->fMask & SIF_PREVIOUSPOS ? OldPos : pSBData->pos; /* SetWindowPos() already did the painting */ if (bRedraw) - { // FIXME: Arrows and interior. - RECTL UpdateRect = psbi->rcScrollBar; - UpdateRect.left -= Window->rcClient.left - Window->rcWindow.left; - UpdateRect.right -= Window->rcClient.left - Window->rcWindow.left; - UpdateRect.top -= Window->rcClient.top - Window->rcWindow.top; - UpdateRect.bottom -= Window->rcClient.top - Window->rcWindow.top; - co_UserRedrawWindow(Window, &UpdateRect, 0, RDW_INVALIDATE | RDW_FRAME); - } // FIXME: Arrows -/* else if( action & SA_SSI_REPAINT_ARROWS ) { - RECTL UpdateRect = psbi->rcScrollBar; - UpdateRect.left -= Window->rcClient.left - Window->rcWindow.left; - UpdateRect.right -= Window->rcClient.left - Window->rcWindow.left; - UpdateRect.top -= Window->rcClient.top - Window->rcWindow.top; - UpdateRect.bottom -= Window->rcClient.top - Window->rcWindow.top; - co_UserRedrawWindow(Window, &UpdateRect, 0, RDW_INVALIDATE | RDW_FRAME); + if ((action & SA_SSI_SHOW) || nBar == SB_CTL) + { + RECTL UpdateRect = psbi->rcScrollBar; + UpdateRect.left -= Window->rcClient.left - Window->rcWindow.left; + UpdateRect.right -= Window->rcClient.left - Window->rcWindow.left; + UpdateRect.top -= Window->rcClient.top - Window->rcWindow.top; + UpdateRect.bottom -= Window->rcClient.top - Window->rcWindow.top; + co_UserRedrawWindow(Window, &UpdateRect, 0, RDW_FRAME | RDW_INVALIDATE); + } + else if (action & SA_SSI_REPAINT_ARROWS) + { + RECTL UpdateRect, Rect = psbi->rcScrollBar; + Rect.left -= Window->rcClient.left - Window->rcWindow.left; + Rect.right -= Window->rcClient.left - Window->rcWindow.left; + Rect.top -= Window->rcClient.top - Window->rcWindow.top; + Rect.bottom -= Window->rcClient.top - Window->rcWindow.top; + if (nBar == SB_HORZ) + { + UpdateRect = Rect; + UpdateRect.right = Rect.left + psbi->dxyLineButton; + co_UserRedrawWindow(Window, &UpdateRect, 0, RDW_FRAME | RDW_INVALIDATE); + UpdateRect = Rect; + UpdateRect.left = Rect.right - psbi->dxyLineButton; + co_UserRedrawWindow(Window, &UpdateRect, 0, RDW_FRAME | RDW_INVALIDATE); + } + else if (nBar == SB_VERT) + { + UpdateRect = Rect; + UpdateRect.bottom = Rect.top + psbi->dxyLineButton; + co_UserRedrawWindow(Window, &UpdateRect, 0, RDW_FRAME | RDW_INVALIDATE); + UpdateRect = Rect; + UpdateRect.top = Rect.bottom - psbi->dxyLineButton; + co_UserRedrawWindow(Window, &UpdateRect, 0, RDW_FRAME | RDW_INVALIDATE); + } + } } -*/ } + } /* Return current position */ return lpsi->fMask & SIF_PREVIOUSPOS ? OldPos : pSBData->pos; } Index: reactos/win32ss/user/user32/controls/scrollbar.c =================================================================== --- reactos/win32ss/user/user32/controls/scrollbar.c (revision 74978) +++ reactos/win32ss/user/user32/controls/scrollbar.c (working copy) @@ -853,11 +853,11 @@ if (Wnd == GetFocus()) ShowCaret(Wnd); ScrollBarInfo.rgstate[ScrollTrackHitTest] &= ~STATE_SYSTEM_PRESSED; NewInfo.rgstate[ScrollTrackHitTest] = ScrollBarInfo.rgstate[ScrollTrackHitTest]; + NewInfo.nTrackPos = GetScrollPos(Wnd, SBType); NtUserSetScrollBarInfo(Wnd, IntScrollGetObjectId(SBType), &NewInfo); - IntDrawScrollInterior(Wnd,Dc,SBType,Vertical,&ScrollBarInfo); + IntDrawScrollInterior(Wnd, Dc, SBType, Vertical, &ScrollBarInfo); IntDrawScrollArrows(Dc, &ScrollBarInfo, Vertical); - break; case WM_SYSTIMER: @@ -878,6 +878,7 @@ break; case SCROLL_TOP_ARROW: + IntDrawScrollArrows(Dc, &ScrollBarInfo, Vertical); if (HitTest == ScrollTrackHitTest) { if ((WM_LBUTTONDOWN == Msg) || (WM_SYSTIMER == Msg)) @@ -953,6 +954,7 @@ Vertical, ScrollTrackingPos); NewInfo.nTrackPos = ScrollTrackingVal; NtUserSetScrollBarInfo(Wnd, IntScrollGetObjectId(SBType), &NewInfo); + SetScrollPos(Wnd, SBType, ScrollTrackingVal, FALSE); IntScrollDrawMovingThumb(Dc, &ScrollBarInfo, Vertical); SendMessageW(WndOwner, Vertical ? WM_VSCROLL : WM_HSCROLL, MAKEWPARAM(SB_THUMBTRACK, ScrollTrackingVal), @@ -980,6 +982,7 @@ break; case SCROLL_BOTTOM_ARROW: + IntDrawScrollArrows(Dc, &ScrollBarInfo, Vertical); if (HitTest == ScrollTrackHitTest) { if ((Msg == WM_LBUTTONDOWN) || (Msg == WM_SYSTIMER)) @@ -1015,6 +1018,8 @@ { UINT Val = IntScrollGetThumbVal(Wnd, SBType, &ScrollBarInfo, Vertical, TrackThumbPos + LastMousePos - LastClickPos); + NewInfo.nTrackPos = Val; + NtUserSetScrollBarInfo(Wnd, IntScrollGetObjectId(SBType), &NewInfo); SendMessageW(WndOwner, Vertical ? WM_VSCROLL : WM_HSCROLL, MAKEWPARAM(SB_THUMBPOSITION, Val), (LPARAM) WndCtl); } @@ -1147,8 +1152,8 @@ Msg.message == WM_MOUSEMOVE || (Msg.message == WM_SYSTIMER && Msg.wParam == SCROLL_TIMER)) { - Pt.x = LOWORD(Msg.lParam) + XOffset; - Pt.y = HIWORD(Msg.lParam) + YOffset; + Pt.x = (short)LOWORD(Msg.lParam) + XOffset; + Pt.y = (short)HIWORD(Msg.lParam) + YOffset; IntScrollHandleScrollEvent(Wnd, SBType, Msg.message, Pt); } else