TO DavidHowe() :
你的意见虽短,但很到位。应该是“根据当前滚动条的位置来进行坐标修正”,确定需要更新的最小区域,这也是一种提高效率的办法。但我的问题不在于此。(LL,你的方法就是这个思想!)
TO shawn_liu():
谢谢你写了那么多中肯的意见。你将问题的现象得十分地透彻,我全部看懂了!
TO quanxiongwei(毛毛熊) :
十分感谢你的解决办法!有一种似曾相识、恍然顿悟的感觉(笨)。
/*不过在CSrollView中的OnPaint中画图不是一个好习惯,记住:
Do not call CScrollView::OnPaint() for painting messages
改在OnDraw里面画图吧。*/谢谢你的意见!
第一个问题,解决方法是在CPaintDC dc(this)后加入OnPrepareDC(&dc)。
不过在CSrollView中的OnPaint中画图不是一个好习惯,记住:
Do not call CScrollView::OnPaint() for painting messages
改在OnDraw里面画图吧。
第二个问题,我找不出原因,所以专门测试了一下。我试了n下,都没有出现
你说的情况,我也帮不了你。
大家用向导生成一个基于CScrollView的SDI,只将修改下面两个函数(先要用类向导添加)即可,运行正常,你会发现滚动滑条时视图显示不完整了!能帮个忙吗?谢谢any insight will be grateful!
void CMyScrollView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 10000;
SetScrollSizes(MM_TEXT, sizeTotal);
}
void CMyScrollView::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect );
int Width=rect.Width();