在对话框上添加一个static控件,派生CScrollStatic类,该类内添加一个初始化函数,添加了一横一纵两个Scrollbar为成员变量,继承了对WM_VSCROLL和WM_HSCROLL的响应函数但未做处理,在OnPaint函数中判断Scrollbar位置并显示位图。
在对话框类中添加派生类的变量,并使之显示指定的位图。当前问题为,初始时位图显示正常,但是不管怎么拖动滚动条,位图显示并未发生变化,仿佛读回来的ScrollPos始终为0.而且只要一松鼠标左键,滚动条就回到了初始位置,百思不得其解,望明白人指点!~~~

解决方案 »

  1.   

    在OnVScroll中GetScrollPos,得到始终为0,若直接将参数SetScrollPos,不成功,GetLastError错误值为5,拒绝访问。
      

  2.   

    要判断nSBCode的值来分别处理。MSDN中的例子:
    void CMyView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
       // Get the minimum and maximum scroll-bar positions.
       int minpos;
       int maxpos;
       pScrollBar->GetScrollRange(&minpos, &maxpos); 
       maxpos = pScrollBar->GetScrollLimit();   // Get the current position of scroll box.
       int curpos = pScrollBar->GetScrollPos();   // Determine the new position of scroll box.
       switch (nSBCode)
       {
       case SB_LEFT:      // Scroll to far left.
          curpos = minpos;
          break;   case SB_RIGHT:      // Scroll to far right.
          curpos = maxpos;
          break;   case SB_ENDSCROLL:   // End scroll.
          break;   case SB_LINELEFT:      // Scroll left.
          if (curpos > minpos)
             curpos--;
          break;   case SB_LINERIGHT:   // Scroll right.
          if (curpos < maxpos)
             curpos++;
          break;   case SB_PAGELEFT:    // Scroll one page left.
       {
          // Get the page size. 
          SCROLLINFO   info;
          pScrollBar->GetScrollInfo(&info, SIF_ALL);
       
          if (curpos > minpos)
          curpos = max(minpos, curpos - (int) info.nPage);
       }
          break;   case SB_PAGERIGHT:      // Scroll one page right.
       {
          // Get the page size. 
          SCROLLINFO   info;
          pScrollBar->GetScrollInfo(&info, SIF_ALL);      if (curpos < maxpos)
             curpos = min(maxpos, curpos + (int) info.nPage);
       }
          break;   case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
          curpos = nPos;      // of the scroll box at the end of the drag operation.
          break;   case SB_THUMBTRACK:   // Drag scroll box to specified position. nPos is the
          curpos = nPos;     // position that the scroll box has been dragged to.
          break;
       }   // Set the new position of the thumb (scroll box).
       pScrollBar->SetScrollPos(curpos);   CView::OnHScroll(nSBCode, nPos, pScrollBar);
    }
      

  3.   

    虽然加了滚动条,但是显示区域的映射关系、坐标原点等都没有变化 自然不会有什么变化
    从CScrollView派生可能会更容易些
      

  4.   

    你该不会是没SetScrollRange吧?
      

  5.   


    估计是没 首先要给定一个范围  用断点调试pos的值
      

  6.   

    恩,我也知道CScrollview更容易些,原来用过
    不过这次是要求派生出一个static的类出来,只好研究一下啦。还有SetScrollRange我也调过了啊,还是不对呢。
      

  7.   

    发现问题了,很低级,SetScrollRange的时候图像宽高没设置,相当于没有初始化,太低级了!
    感谢LS各位的提醒,散分