RT,在视图(派生于CScrollView)中有个自动生成的垂直滚动条,我在其OnVScroll事件中设置其位置,我屏蔽掉了这里调用CScrollView::OnVScroll代码,自己处理。问题是我怎么获取到这个滚动条的对象呢?直接用this不行,它调用的是CWND
的,需要一个ID参数,使用pScrollBar也不行,返回空,我还想知道这个函数中的三个参数是给我用的,还是我要设置的?

解决方案 »

  1.   

    GetSystemMetrics(SM_CXVSCROLL)参数怎么用的看看MSDN
      

  2.   

    例子
    void CGMMediaUploadDlg::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,15);
    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,-15);
    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)*15);
    scrollinfo.nPos = nPos;
    SetScrollInfo(SB_VERT,&scrollinfo,SIF_ALL);
    break;
    } CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
    }