BOOL CXTPPropertyPage::OnScrollBy(CSize sizeScroll, BOOL bDoScroll) { int xOrig, x; int yOrig, y; // don't scroll if there is no valid scroll range (ie. no scroll bar) CScrollBar* pBar; DWORD dwStyle = GetStyle(); pBar = GetScrollBarCtrl(SB_VERT); if ((pBar != NULL && !pBar->IsWindowEnabled()) || (pBar == NULL && !(dwStyle & WS_VSCROLL))) { // vertical scroll bar not enabled sizeScroll.cy = 0; } pBar = GetScrollBarCtrl(SB_HORZ); if ((pBar != NULL && !pBar->IsWindowEnabled()) || (pBar == NULL && !(dwStyle & WS_HSCROLL))) { // horizontal scroll bar not enabled sizeScroll.cx = 0; } // adjust current x position xOrig = x = GetScrollPos(SB_HORZ); int xMax = GetScrollLimit(SB_HORZ); x += sizeScroll.cx; if (x < 0) x = 0; else if (x > xMax) x = xMax; // adjust current y position yOrig = y = GetScrollPos(SB_VERT); int yMax = GetScrollLimit(SB_VERT); y += sizeScroll.cy; if (y < 0) y = 0; else if (y > yMax) y = yMax; // did anything change? if (x == xOrig && y == yOrig) return FALSE; if (bDoScroll) { // do scroll and update scroll positions ScrollPage(-(x-xOrig), -(y-yOrig)); if (x != xOrig) SetScrollPos(SB_HORZ, x); if (y != yOrig) SetScrollPos(SB_VERT, y); } return TRUE; }
void COXTabViewContainer::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default if((int)nIDEvent==m_nScrollPageTimer) { if(m_nPressedScrlBtn!=NONE && m_bIsScrlBtnPressed) ScrollPage(m_nPressedScrlBtn); } CWnd::OnTimer(nIDEvent); }
void CXTPPropertyPage::ScrollToDevicePosition(POINT ptDev) { ASSERT(ptDev.x >= 0); ASSERT(ptDev.y >= 0); // Note: ScrollToDevicePosition can and is used to scroll out-of-range // areas as far as CXTPPropertyPage is concerned -- specifically in // the print-preview code. Since OnScrollBy makes sure the range is // valid, ScrollToDevicePosition does not vector through OnScrollBy. int xOrig = GetScrollPos(SB_HORZ); SetScrollPos(SB_HORZ, ptDev.x); int yOrig = GetScrollPos(SB_VERT); SetScrollPos(SB_VERT, ptDev.y); ScrollPage(xOrig - ptDev.x, yOrig - ptDev.y); }
void COXTabViewContainer::StartTracking(const CPoint& point) { ASSERT(m_nPressedScrlBtn==NONE); m_nPressedScrlBtn=NONE; int hitTest=HitTest(point); if(hitTest==SCRLSTARTBTN || hitTest==SCRLBACKWARDBTN || hitTest==SCRLFORWARDBTN || hitTest==SCRLENDBTN) { SetCapture(); m_nPressedScrlBtn=(HITTEST)hitTest; m_bIsScrlBtnPressed=TRUE; RedrawScrollButton(m_nPressedScrlBtn); ScrollPage(m_nPressedScrlBtn); m_nScrollPageTimer=SetTimer(IDT_SCROLLPAGE_TIMER, ID_SCROLLPAGE_DELAY,NULL); } else if(hitTest==SPLITTER) { SetCapture(); m_bIsSplitterPressed=TRUE; } }