MFC的CSrollView在大尺寸下,拖动滚动条会回弹,求解决。
CSrollView在大尺寸下,拖动滚动条会回弹。我在OnVScroll打印了信息,如下:voidCCodesView::OnVScroll(UINTnSBCode,UI...
CSrollView在大尺寸下,拖动滚动条会回弹。我在OnVScroll打印了信息,如下:
void CCodesView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
Invalidate();
CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
CSize total_size = GetTotalSize();
int scroll_pos = GetScrollPos(SB_VERT);
CPoint scroll_pt = GetScrollPosition(); // 左上点的坐标
TRACE("total_size:%d,%d, scroll_pos:%d, scroll_pt:%d,%d, nPos:%d\n",total_size.cx,total_size.cy,scroll_pos,scroll_pt.x,scroll_pt.y,nPos);
}
TRACE的部分信息为:
total_size:1827,1270699, scroll_pos:10951, scroll_pt:0,10951, nPos:10951
total_size:1827,1270699, scroll_pos:14490, scroll_pt:0,14490, nPos:14490
total_size:1827,1270699, scroll_pos:18028, scroll_pt:0,18028, nPos:18028
total_size:1827,1270699, scroll_pos:18028, scroll_pt:0,18028, nPos:18028
总高度是1270699,但滚动点最多只到了18028,相差甚远,但是我明明已经把滚动条拉到最后了。这个view的page和line size比较小,会不会和这个相关?怎么解决这个问题?
补充一点,这个view的绘图用的是双缓存方法,是否和这个有关? 展开
void CCodesView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
Invalidate();
CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
CSize total_size = GetTotalSize();
int scroll_pos = GetScrollPos(SB_VERT);
CPoint scroll_pt = GetScrollPosition(); // 左上点的坐标
TRACE("total_size:%d,%d, scroll_pos:%d, scroll_pt:%d,%d, nPos:%d\n",total_size.cx,total_size.cy,scroll_pos,scroll_pt.x,scroll_pt.y,nPos);
}
TRACE的部分信息为:
total_size:1827,1270699, scroll_pos:10951, scroll_pt:0,10951, nPos:10951
total_size:1827,1270699, scroll_pos:14490, scroll_pt:0,14490, nPos:14490
total_size:1827,1270699, scroll_pos:18028, scroll_pt:0,18028, nPos:18028
total_size:1827,1270699, scroll_pos:18028, scroll_pt:0,18028, nPos:18028
总高度是1270699,但滚动点最多只到了18028,相差甚远,但是我明明已经把滚动条拉到最后了。这个view的page和line size比较小,会不会和这个相关?怎么解决这个问题?
补充一点,这个view的绘图用的是双缓存方法,是否和这个有关? 展开
1个回答
展开全部
两个问题:
总高度是1270699是必然失败的,这个高度严重超出了View类位图绘制的限制范围,太大了。
OnVScroll里面,不应该上来就Invalidate,这个严重消耗资源,系统在滚动消息之后会自动触发区域重绘,你这个全部重绘对于一个超大视图来说,消耗太大了。
CView显示位图,理论最大范围是64k*64k,也就是说总的位大小不能超过4G位,但实际上,当高度或者宽度超高的时候,也会出错。
你这个情况,如果高度确定是127万,那么必须用算法优化进行局部显示和切换,不可能全部显示到一个视图中的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询