我用对话框做成一个工具条,可是滚动功能不起作用(垂直方向),我重载了
OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
  CDialogBar::OnVScroll(nSBCode, nPos, pScrollBar);
}可是我不知道该添加什么代码,能使滚动生效。

解决方案 »

  1.   

    SCROLLINFO sfi={sizeof(SCROLLINFO)};
    sfi.fMask=SIF_ALL;
    sfi.nMax=1000;
    sfi.nMin=0;
    sfi.nPage=100;
    sfi.nPos=0;
    SetScrollInfo(SB_VERT,&sfi);
      

  2.   

    CWnd::ScrollWindow
    void ScrollWindow( int xAmount, int yAmount, LPCRECT lpRect = NULL, LPCRECT lpClipRect = NULL );
      

  3.   

    要处理V_SCROLL / H_SCROLL 消息,
      

  4.   

    1.主窗口中消息影射  ON_WM_VSCROLL()
    2。函数 void CIRCEditView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {}

    3。 afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
      

  5.   

    下面是我的一段代码,你看着改:void CIRCEditView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    SCROLLINFO s;
    s.cbSize = sizeof(s);
    m_Scroll.GetScrollInfo(&s, SIF_POS|SIF_RANGE|SIF_PAGE);
    BOOL bReDraw = FALSE; switch(nSBCode)
    {
    case SB_PAGEUP:
    if(pChannel.GetAt(CurChannel)->m_Lines > m_VisiableLines)
    {
    if( pChannel.GetAt(CurChannel)->m_TopLine > m_VisiableLines)
    pChannel.GetAt(CurChannel)->m_TopLine -= m_VisiableLines;
    else
    pChannel.GetAt(CurChannel)->m_TopLine = 0;
    s.nPos = pChannel.GetAt(CurChannel)->m_TopLine + 1;
    bReDraw = TRUE;
    pChannel.GetAt(CurChannel)->m_AutoVScroll = FALSE;
    }
    break;
    case SB_PAGEDOWN:
    if(pChannel.GetAt(CurChannel)->m_Lines > m_VisiableLines)
    {
    pChannel.GetAt(CurChannel)->m_TopLine += m_VisiableLines;
    if(pChannel.GetAt(CurChannel)->m_TopLine >= (pChannel.GetAt(CurChannel)->m_Lines - m_VisiableLines))
    {
    pChannel.GetAt(CurChannel)->m_TopLine = pChannel.GetAt(CurChannel)->m_Lines - m_VisiableLines;
    pChannel.GetAt(CurChannel)->m_AutoVScroll = TRUE;
    }
    else
    pChannel.GetAt(CurChannel)->m_AutoVScroll = FALSE;
    s.nPos = pChannel.GetAt(CurChannel)->m_TopLine + 1;
    bReDraw = TRUE;
    }
    break;
    case SB_BOTTOM:
    if(pChannel.GetAt(CurChannel)->m_Lines > m_VisiableLines)
    if(pChannel.GetAt(CurChannel)->m_TopLine != (pChannel.GetAt(CurChannel)->m_Lines - m_VisiableLines))
    {
    pChannel.GetAt(CurChannel)->m_TopLine = pChannel.GetAt(CurChannel)->m_Lines - m_VisiableLines;
    s.nPos = pChannel.GetAt(CurChannel)->m_TopLine + 1;
    bReDraw = TRUE;
    pChannel.GetAt(CurChannel)->m_AutoVScroll = TRUE;
    }
    break;
    case SB_LINEDOWN:
    if(pChannel.GetAt(CurChannel)->m_Lines > m_VisiableLines)
    if(pChannel.GetAt(CurChannel)->m_TopLine < (pChannel.GetAt(CurChannel)->m_Lines - m_VisiableLines))
    {
    pChannel.GetAt(CurChannel)->m_TopLine ++;
    if(pChannel.GetAt(CurChannel)->m_TopLine == (pChannel.GetAt(CurChannel)->m_Lines - m_VisiableLines))
    pChannel.GetAt(CurChannel)->m_AutoVScroll = TRUE;
    else
    pChannel.GetAt(CurChannel)->m_AutoVScroll = FALSE;
    s.nPos ++;
    bReDraw = TRUE;
    }
    break;
    case SB_LINEUP:
    if(pChannel.GetAt(CurChannel)->m_Lines > m_VisiableLines)
    {
    if(pChannel.GetAt(CurChannel)->m_TopLine == 0)
    break;
    pChannel.GetAt(CurChannel)->m_TopLine --;
    s.nPos --;
    bReDraw = TRUE;
    pChannel.GetAt(CurChannel)->m_AutoVScroll = FALSE;
    }
    break;
    case SB_TOP:
    if(pChannel.GetAt(CurChannel)->m_Lines > m_VisiableLines)
    {
    pChannel.GetAt(CurChannel)->m_TopLine = 0;
    s.nPos = 1;
    bReDraw = TRUE;
    pChannel.GetAt(CurChannel)->m_AutoVScroll = TRUE;
    }
    break;
    case SB_THUMBTRACK:
    case SB_THUMBPOSITION:
    if(pChannel.GetAt(CurChannel)->m_Lines > m_VisiableLines)
    {
    pChannel.GetAt(CurChannel)->m_TopLine = nPos - 1;
    if(pChannel.GetAt(CurChannel)->m_TopLine == (pChannel.GetAt(CurChannel)->m_Lines - m_VisiableLines))
    pChannel.GetAt(CurChannel)->m_AutoVScroll = TRUE;
    else
    pChannel.GetAt(CurChannel)->m_AutoVScroll = FALSE;
    s.nPos = nPos;
    bReDraw = TRUE;
    }
    break;
    }
    s.fMask = SIF_POS;
    m_Scroll.SetScrollInfo(&s, TRUE);
    if(bReDraw == TRUE)
    {
    pChannel.GetAt(CurChannel)->m_ReloadViBuf = TRUE;
    RedrawWindow();
    }
    }
      

  6.   

    那是我自己的一个类。void C*View::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    SCROLLINFO s;
    s.cbSize = sizeof(s);
    m_Scroll.GetScrollInfo(&s, SIF_POS|SIF_RANGE|SIF_PAGE); switch(nSBCode)
    {
    case SB_PAGEUP:
    //上翻一页
    break;
    case SB_PAGEDOWN:
    //下翻一页
    break;
    case SB_BOTTOM:
    //移动到底
    break;
    case SB_LINEDOWN:
    //下翻一行
    break;
    case SB_LINEUP:
    //上翻一行
    break;
    case SB_TOP:
    //移动到顶部
    break;
    case SB_THUMBTRACK:
    case SB_THUMBPOSITION:
                      //拖动,根据NPOS确定
    s.nPos = nPos;
    break;
    }
    s.fMask = SIF_POS;
    m_Scroll.SetScrollInfo(&s, TRUE);         RedrawWindow();
    }
      

  7.   

    学习
    ================================================================我是 anothervip ......................