被这东西困扰了半天,郁闷;特留下记录,希望能帮你在这上面少浪费时间。
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,搞个这样脑残的设计!
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,搞个这样脑残的设计!