MFC CScrollView 对大视图出现滚动条回滚问题的解决

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章