原因是
- 要处理SB_ENDSCROLL事件。
- 一定要在适当的地方GetScrollPos或SetScrollPos。
正确示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | void SampleDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) { int iMin = 0, iMax = 0; pScrollBar->GetScrollRange(&iMin, &iMax); // nPos = pScrollBar->GetScrollPos(); // 此处这句话一定不能有 switch (nSBCode) { case SB_THUMBTRACK: break; case SB_LINELEFT: nPos = pScrollBar->GetScrollPos(); // 此处这句话一定要有 nPos--; if (nPos < (UINT)iMin) nPos = 0; break; case SB_LINERIGHT: nPos = pScrollBar->GetScrollPos(); // 此处这句话一定要有 nPos++; if (nPos >= (UINT)iMax) nPos = iMax - 1; break; case SB_ENDSCROLL: nPos = pScrollBar->GetScrollPos(); // 此处这句话一定要有 break; default: break; } pScrollBar->SetScrollPos(nPos, 1); // 此处这句话也一定要有 // Todo real work with nPos. CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar); } |