我给对话框选中了Horizontal scroll和Vertical scroll之后怎么样实现拖动他们让窗口跟着滚动啊?使他们能实现和文档中一样的功能,就是我点上下滚动条的时候窗口的内容也能够翻页,小弟是个新手,能说的具体一点吗,能副上代码最好了,谢谢!

解决方案 »

  1.   

    需要处理OnVScroll()OnHScroll()两个消息void CSystemdlg::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.nMin)
    {
    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.nMin)
    {
    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:
    // MessageBox("SB_ENDSCROLL");
    break;
    case SB_THUMBPOSITION:
    // ScrollWindow(0,(scrollinfo.nPos-nPos)*10);
    // scrollinfo.nPos = nPos;
    // SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
    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);
    }void CSystemdlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    // TODO: Add your message handler code here and/or call default SCROLLINFO scrollinfo;
    GetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
    switch (nSBCode)
    {
    case SB_LEFT:
    ScrollWindow((scrollinfo.nPos-scrollinfo.nMin)*10,0);
    scrollinfo.nPos = scrollinfo.nMin;
    SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
    break;
    case SB_RIGHT:
    ScrollWindow((scrollinfo.nPos-scrollinfo.nMax)*10,0);
    scrollinfo.nPos = scrollinfo.nMax;
    SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
    break;
    case SB_LINELEFT:
    scrollinfo.nPos -= 1;
    if (scrollinfo.nPos<scrollinfo.nMin)
    {
    scrollinfo.nPos = scrollinfo.nMin;
    break;
    }
    SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
    ScrollWindow(10,0);
    break;
    case SB_LINERIGHT:
    scrollinfo.nPos += 1;
    if (scrollinfo.nPos>scrollinfo.nMax)
    {
    scrollinfo.nPos = scrollinfo.nMax;
    break;
    }
    SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
    ScrollWindow(-10,0);
    break;
    case SB_PAGELEFT:
    scrollinfo.nPos -= 5;
    if (scrollinfo.nPos<scrollinfo.nMin)
    {
    scrollinfo.nPos = scrollinfo.nMin;
    break;
    }
    SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
    ScrollWindow(10*5,0);
    break;
    case SB_PAGERIGHT:
    scrollinfo.nPos += 5;
    if (scrollinfo.nPos>scrollinfo.nMax)
    {
    scrollinfo.nPos = scrollinfo.nMax;
    break;
    }
    SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
    ScrollWindow(-10*5,0);
    break;
    case SB_THUMBPOSITION:
    break;
    case SB_THUMBTRACK:
    ScrollWindow((scrollinfo.nPos-nPos)*10,0);
    scrollinfo.nPos = nPos;
    SetScrollInfo(SB_HORZ,&scrollinfo,SIF_ALL);
    break;
    case SB_ENDSCROLL:
    break;
    } CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    }