解决VC滚动条16位限制 tag: 滚动条, OnVScroll, 16位, 32位,SB_THUMBTRACK, SCROLLINFO , nTrackPos

被这东西困扰了半天,郁闷;特留下记录,希望能帮你在这上面少浪费时间。 
 OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    int nCurPos = pScrollBar->GetScrollPos();

    switch( nSBCode )
    {
    case SB_LINEDOWN:
        nCurPos++;    
        break;
    
    case SB_LINEUP:
        nCurPos--;
        break;
    
    case SB_PAGEDOWN:
        nCurPos+=m_nRowNum;
        break;
    
    case SB_PAGEUP:
        nCurPos-=m_nRowNum;
        break;
    
    case SB_THUMBTRACK:
       //这儿是关键                       
        SCROLLINFO si; 
        si.cbSize = sizeof(SCROLLINFO);  
        si.fMask = SIF_TRACKPOS;  
        c_VSBar_ListCtrl.GetScrollInfo(&si, SIF_TRACKPOS);
        nCurPos = si.nTrackPos; //nTrackPos是32位int
        break;
    
    default:
        break;
    }

    pScrollBar->SetScrollPos(nCurPos);

    ListCtrlLoadData(nCurPos, m_nRowNum);

    CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

解释: nSBCode 如果是SB_THUMBTRACK 或 SB_THUMBPOSITION, 则只能得到16位的滚动条位置信息(nSBCode 的其它情况无此问题, 可得到32位位置信息); 因此要动用SCROLLINFO,它的成员nTrackPos是个32位整数。
气愤:微软是超级大SB,搞个这样脑残的设计!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值