请问,我的单文档程序里把CView改成CScrollView,并且设大小30000*20000
这时我想在里画直线
CClientDC dc(this);
dc.MoveTo(15000,15000);
dc.LineTo(15100,15100);
这时显示不出了;dc.MoveTo(0,0);
dc.LineTo(100,100);这个就可以。他是以我的客户区为坐标系。我怎么能画出
dc.MoveTo(15000,15000);
dc.LineTo(15100,15100);
????????

解决方案 »

  1.   

    不是没画出来,而是100像素相对要拖动滚动空间太大,没看到(要同时拖动两个滚动条)
    dc.MoveTo(0,0);
    dc.LineTo(100,100);这个可以是因为不用拖动
      

  2.   


    我已经把滚动条滚到中心了,所以应该是dc.MoveTo(0,0);
    dc.LineTo(100,100);没有,但事实是有,dc.MoveTo(15000,15000);
    dc.LineTo(15100,15100);没有
      

  3.   

    DC选用不对,不要使用CClientDC dc(this);这个DC和滚动条没有联系,坐标点是相对视窗的左上角,拖动滚动条不会改变绘图的位置。
    要使用滚动条,绘图代码放在OnDraw函数中,在别处绘图也使用这个DC,
    在视类中定义CDC *pMDC;
    void CYourScrollView::OnDraw(CDC* pDC)
    {
        pMDC = pDC;
        pMDC->MoveTo(15000,15000);
        pMDC->LineTo(15100,15100);
    }
    void CYourScrollView::TestDrawLine()
    {
        pMDC->MoveTo(15000,15000);
        pMDC->LineTo(15100,15100);
    }
      

  4.   


    恩,这个我做过!但用CDC的话,我程序出错,我是在OnTimer()画图,用cdc就报错!
    能不能再用其他的?
      

  5.   

    好像还是不行,在OnTimer()画图
      

  6.   

    CClientDC dc(this);
    OnPrepareDC(&dc);
    ...
      

  7.   

    在OnTimer()画图,就使用CClientDC(默认绘图使用设备坐标),LZ想使用逻辑坐标绘图,要做一个dc转换
    void CYourScrollView::OnTimer(UINT nIDEvent)
    {
        CClientDC dc(this);
        OnPrepareDC(&dc);//dc转化    dc.MoveTo(15000,15000);;//使用逻辑坐标绘图,
        dc.LineTo(15100,15100);    
    }