只能重载Edit了 想起来是个很复杂的工作

解决方案 »

  1.   

    我有重载Edit,写了个CScrollEdit类
    实现了如下方法
    void CScrollEdit::PreSubclassWindow() 
    {
        // TODO: Add your specialized code here and/or call the base class
        //自建滚动条 ,m_vBar为自建滚动条 ,BAR_WIDTH为m_vBar的宽度 =16 
        CRect rc;
        GetClientRect(&rc);
        rc.left =rc.right - BAR_WIDTH;
        m_vBar.Create(WS_CHILD|SBS_VERT,rc,this,100);
        EnableScrollBarCtrl(SB_VERT);
        CEdit::PreSubclassWindow();
    }
    void CScrollEdit::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    // TODO: Add your message handler code here and/or call default SCROLLINFO ScrInfo;
    GetScrollInfo(SB_VERT,&ScrInfo);
    m_vBar.SetScrollInfo(&ScrInfo);   
    int pos;
    pos = m_vBar.GetScrollPos();

    switch ( nSBCode )
    {
    case SB_LINEUP:

    pos -= 1;

    break;

    case SB_LINEDOWN:

    pos += 1;

    break;

    case SB_PAGEUP:

    pos -= 10;

    break;

    case SB_PAGEDOWN:

    pos += 10;

    break;

    case SB_TOP:

    pos = ScrInfo.nMin;

    break;

    case SB_BOTTOM:

    pos = ScrInfo.nMax;

    break;

    case SB_THUMBPOSITION:

    pos = nPos;

    break;

    default:

    return;

    }

    if ( pos < ScrInfo.nMin )

    pos = ScrInfo.nMin;

    else if ( pos > ScrInfo.nMax )

    pos = ScrInfo.nMax;

    m_vBar.SetScrollPos(pos);
    CEdit::OnVScroll(nSBCode, nPos, pScrollBar);
    }
    但拉动滚动条,鼠标一松,滚动条又滚动到最上面了,知道为什么吗?
    并且我追踪到,拖动鼠标时,有响应SB_THUMBPOSITION操作,但就是没办法定位到我拖动的位置