谢谢!

解决方案 »

  1.   

    BOOL CMy11111View::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 = FlatSB_GetScrollPos(m_hWnd, 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 = FlatSB_GetScrollPos(m_hWnd, 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
    ScrollWindow(-(x-xOrig), -(y-yOrig));
    if (x != xOrig)
    {
    FlatSB_SetScrollPos(m_hWnd, SB_HORZ, x, TRUE);
    //SetScrollPos(SB_HORZ, x);
    }
    if (y != yOrig)
    {
    //SetScrollPos(SB_VERT, y);
    FlatSB_SetScrollPos(m_hWnd, SB_VERT, y, TRUE);
    }
    }
    return TRUE;
    }重写CScrollView的须函数OnScrollBy
      

  2.   

    调用InitializeFlatSB(m_hWnd);之后我又调用了SetScrollSizes函数,现在我每次SetScrollSizes之后都重新调用InitializeFlatSB就没有问题了