我再对话框中加载滚动条,基本的功能都可以实现,但问题是滚动条存在自动回到起始点的问题。不知道那位大侠可以知道一下。

解决方案 »

  1.   

    再试试:在窗体的DeActivated事件加上一句: this.SetScrollState(0,false); 在Activated事件中加上: this.SetScrollState(0,true); 
      

  2.   

    我的没这么复杂
    int nCurPos=0;  
    switch(nSBCode)
    {
    case SB_LINELEFT:
    if (nCurPos > 0)
    nCurPos--;
    break;
    case SB_LINERIGHT:
    if (nCurPos < 804)
    nCurPos++;
    break;
    case SB_PAGERIGHT:
    if (nCurPos < 804)
    nCurPos++;
    break;
    case SB_PAGELEFT:
    if (nCurPos > 0)
    nCurPos--;
    break;
    case SB_THUMBTRACK:
    nCurPos = nPos;
    break;
    }
    pScrollBar->SetScrollPos(nCurPos,FALSE);
    m_x = nCurPos;
    CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
      

  3.   

    再试试:在窗体的DeActivated事件加上一句:  this.SetScrollState(0,false);  在Activated事件中加上:  this.SetScrollState(0,true); 在窗体的DeActivated事件加上一句? 没看明白啊
      

  4.   

    初始化时m_hscroll.SetScrollRange(0,804,FALSE) 中最后一个参数有什么影响。
      

  5.   


    // 处理WM_VSCROLL,WM_HSCROLL与此类似void CXXDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    // TODO: Add your message handler code here and/or call default
    SCROLLINFO scrollinfo;  
    GetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
    switch (nSBCode)  
    {  
    case SB_BOTTOM:  
    ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMax)*10);  
    scrollinfo.nPos = scrollinfo.nMax;  
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
    break;  
    case SB_TOP:  
    ScrollWindow(0,(scrollinfo.nPos-scrollinfo.nMin)*10);  
    scrollinfo.nPos = scrollinfo.nMin;  
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
    break;  
    case SB_LINEUP:  
    scrollinfo.nPos -= 1;  
    if (scrollinfo.nPos)
    {  
    scrollinfo.nPos = scrollinfo.nMin;  
    break;  
    }  
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
    ScrollWindow(0,10);  
    break;  
    case SB_LINEDOWN:  
    scrollinfo.nPos += 1;  
    if (scrollinfo.nPos>scrollinfo.nMax)  
    {  
    scrollinfo.nPos = scrollinfo.nMax;  
    break;  
    }  
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
    ScrollWindow(0,-10);  
    break;  
    case SB_PAGEUP:  
    scrollinfo.nPos -= 5;  
    if (scrollinfo.nPos)
    {  
    scrollinfo.nPos = scrollinfo.nMin;  
    break;  
    }  
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
    ScrollWindow(0,10*5);  
    break;  
    case SB_PAGEDOWN:  
    scrollinfo.nPos += 5;  
    if (scrollinfo.nPos>scrollinfo.nMax)  
    {  
    scrollinfo.nPos = scrollinfo.nMax;  
    break;  
    }  
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
    ScrollWindow(0,-10*5);  
    break;  
    case SB_ENDSCROLL:  
    break;  
    case SB_THUMBPOSITION:   
    break;  
    case SB_THUMBTRACK:  
    ScrollWindow(0,(scrollinfo.nPos-nPos)*10);  
    scrollinfo.nPos = nPos;  
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);  
    break;  
    }   CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
    }
      

  6.   

    这个是改变SCROLLINFO的 不能直接用SetScrollPos()? 吗
      

  7.   

    散分了,问题解决了。问题出现在
    int nCurPos=0; 
    在写信息相应的时候,相关相应函数要运行2次,(本人小菜,不知道这个叫什么机制,那位大仙解释一下),这个是调试断点进入的。
    第一次的时候可以正确设置滚动条当前位置,当第二次运行时,nCurPos将不会被赋值,所以还是初始化的0.
    解决方法 对nCurPos进行赋值
    nCurPos = pScrollBar->GetScrollPos();
    后一切工作就正常了。