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

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