我创建了一个单文档,基类为CScrollView的程序,创建完之后把ScrollSize修改为1000(默认为100),代码如下。
void CTempView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate(); CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 1000;
SetScrollSizes(MM_TEXT, sizeTotal);
}
然后我在OnDraw函数中加入代码如下。
void CTempView::OnDraw(CDC* pDC)
{
CTempDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->SetViewportOrg(20,20);
pDC->MoveTo(0,0);
pDC->LineTo(100,100);
pDC->TextOut(120,100,"hello");
}
运行程序,拖动滚动条,出现花屏现象。但是把代码行pDC->SetViewportOrg(20,20);
去掉,拖动滚动条时就正常。感觉好像是一旦重新设置了视口原点,就会出现花屏。我在OnPaint函数中也作了尝试,效果相同。
我的问题是:如何,或者在哪儿,把基类为CScrollView的View中设置视口原点呢?谢谢!
,如果您有相关代码,请给我发一个,我会非常感谢您!

解决方案 »

  1.   

    设置窗口与视图是相对的一个概念一般应该按次序来调用:
    pDC->SetWindowOrg(CPoint(logOrgX,logOrgY));
    pDC->SetWindowExt(szTotal);
    pDC->SetViewportExt(szTotal);
    pDC->SetViewportOrg(ptVpOrg);
      

  2.   

    GeoPeeker你好!
    我试着加入几行代码,但效果还是花屏。后来想是不是加多了,就我索性就选了一行。感觉还缺少点什么,或者不这么用,谢谢你,帮我试。