#include bool ScrollInfo::pageDown(void) { int yDelta; int yNew; int xDelta; xDelta=0; yNew=currScrolly()+PageIncrement; yNew=imax(0,yNew); yNew=imin(maxScrolly(),yNew); if(yNew==currScrolly())return false; scrollEvent(TRUE); yDelta=yNew-currScrolly(); currScrolly(yNew); ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); ::UpdateWindow(hwndOwner()); ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); return true; } bool ScrollInfo::pageUp(void) { int yDelta; int yNew; int xDelta; xDelta=0; yNew=currScrolly()-PageIncrement; yNew=imax(0,yNew); yNew=imin(maxScrolly(),yNew); if(yNew==currScrolly())return false; scrollEvent(TRUE); yDelta=yNew-currScrolly(); currScrolly(yNew); ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); ::UpdateWindow(hwndOwner()); ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); return true; } void ScrollInfo::handleHorizontalScroll(CallbackData &someCallbackData) { int xDelta; int yDelta; int xNew; yDelta=0; switch(LOWORD(someCallbackData.wParam())) { case SB_PAGEUP : xNew=currScrollx()-PageIncrement; break; case SB_PAGEDOWN : xNew=currScrollx()+PageIncrement; break; case SB_LINEUP : xNew=currScrollx()-LineIncrement; break; case SB_LINEDOWN : xNew=currScrollx()+LineIncrement; break; case SB_THUMBPOSITION : xNew= HIWORD(someCallbackData.wParam()); break; default : xNew=currScrollx(); break; } xNew=imax(0,xNew); xNew=imin(maxScrollx(),xNew); if(xNew==currScrollx())return; scrollEvent(TRUE); xDelta=xNew-currScrollx(); currScrollx(xNew); ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); ::UpdateWindow(hwndOwner()); ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); } void ScrollInfo::handleVerticalScroll(CallbackData &someCallbackData) { int yDelta; int yNew; int xDelta; xDelta=0; switch(LOWORD(someCallbackData.wParam())) { case SB_PAGEUP : yNew=currScrolly()-PageIncrement; break; case SB_PAGEDOWN : yNew=currScrolly()+PageIncrement; break; case SB_LINEUP : yNew=currScrolly()-LineIncrement; break; case SB_LINEDOWN : yNew=currScrolly()+LineIncrement; break; case SB_THUMBPOSITION : yNew=HIWORD(someCallbackData.wParam()); break; default : yNew=currScrolly(); break; } yNew=imax(0,yNew); yNew=imin(maxScrolly(),yNew); if(yNew==currScrolly())return; scrollEvent(TRUE); yDelta=yNew-currScrolly(); currScrolly(yNew); ::ScrollWindow(hwndOwner(),-xDelta,-yDelta,(const RECT*)0,(const RECT*)0); ::UpdateWindow(hwndOwner()); ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); } void ScrollInfo::handleSize(CallbackData &someCallbackData) { int xNew(someCallbackData.loWord()); int yNew(someCallbackData.hiWord()); sizeEvent(TRUE); maxScrollx(imax(scrollableObjectWidth()-xNew,0)); ::SetScrollRange(hwndOwner(),SB_HORZ,minScrollx(),maxScrollx(),FALSE); currScrollx(imin(currScrollx(),maxScrollx())); ::SetScrollPos(hwndOwner(),SB_HORZ,currScrollx(),TRUE); maxScrolly(imax(scrollableObjectHeight()-yNew,0)); ::SetScrollRange(hwndOwner(),SB_VERT,minScrolly(),maxScrolly(),FALSE); currScrolly(imin(currScrolly(),maxScrolly())); ::SetScrollPos(hwndOwner(),SB_VERT,currScrolly(),TRUE); }