CScrollView类中,若视图尺寸很大。
如100000*100000;
void CLOView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
SetScrollSizes(MM_TEXT, CSize(100000,100000));
}
那么当拖动滚动框距离稍大一点时,就会出现回滚,即滚动框又回到0位置。
原因:CScrollView使用的滚动条是已经"过时"的函数,即SetScrollRange和SetScrollPos函数,或许这些函数都是从Win16 APIs遗留下来的吧。当响应WM_VSCROLL的SB_THUMBTRACK消息时wParam的低16bits为SB_THUMBTRACK标识,而高16bits为滚动框的当前位置。因此大的最大位置只能到65535.当到达65535时,你还在拖动滚动框,就会出出现65535-->0,从而使滚动框又回到了0的位置。
解决办法:用32位的API,GetScrollInfo, SetScrollInfo