用OnDraw()来画两条直线,当第一条直线画了后画第二条的时候,发现第二条直线把第一条直线给覆盖掉了,也就是说第一条直线消失了!

解决方案 »

  1.   

    你把所有的画线操作都写在窗口重画的函数里,如OnDraw里,把所有的直线信息储存起来
      

  2.   

    “覆盖”是什么意思?如果你要画多条直线,每一次执行OnDraw()都要画“满”了才可以。简单说就是说上次OnDraw()中画的东西在下次执行OnDraw()之前会全部被清空掉,不会继续保留的。
      

  3.   

    void CTestView::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting
    dc.MoveTo(100,100);
    dc.LineTo(200,100);
    dc.LineTo(200,200);
    }
    这样怎么可能有问题?
      

  4.   

    OnDraw也一样
    void CTestView::OnDraw(CDC* pDC)
    {
    CTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    pDC->MoveTo(100,100);
    pDC->LineTo(200,100);
    pDC->LineTo(200,200);
    }
      

  5.   

    也一样
    void CTestView::OnDraw(CDC* pDC)
    {
    CTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    pDC->MoveTo(100,100);
    pDC->LineTo(200,100);
              pDC->MoveTo(200,100);\\修改处
    pDC->LineTo(200,200);
    }
      

  6.   

    不可能的事情。
    我copy了你的代码,在ondraw当中,都可以正常显示
    没有必要再moveto,LintTo后自动把点定位到终点的
      

  7.   

    没问题的,不过没必要再MoveTo
      

  8.   

    把需要画的点坐标记录在一个数组中,然后再调用onDraw,LineTo....
      

  9.   

    void CTest_2_painView::OnDraw(CDC* pDC)
    {
    CTest_2_painDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    CBitmap * pOldBitmap=m_pMemDC->SelectObject(m_pBitmap);
    pDC->BitBlt(0,0,m_nMaxX,m_nMaxY,m_pMemDC,0,0,SRCCOPY);
    m_pMemDC->SelectObject(pOldBitmap);

    if(pDoc->loading)
    {
    POSITION pos;
    pos=pDoc->m_Lines.GetHeadPosition();//m_Lines是一个链表
    pDoc->temp=pDoc->m_Lines.GetHead();
    while(pos)
    {


    m_bDrawing=FALSE;
    CBitmap *pOldBitmap=m_pMemDC->SelectObject(m_pBitmap);
    CPen pen;
    pen.CreatePen(PS_SOLID,pDoc->temp->m_Width,pDoc->temp->color);
    CPen * pOldPen = m_pMemDC->SelectObject(&pen);
    CRect rect(pDoc->temp->m_Start,pDoc->temp->m_End);
    m_pMemDC->MoveTo(pDoc->temp->m_Start);
    m_pMemDC->LineTo(pDoc->temp->m_End);
    Invalidate(FALSE);

    m_pMemDC->SelectObject(pOldBitmap);
    m_pMemDC->SelectObject(pOldPen);
    pDoc->temp=pDoc->m_Lines.GetNext(pos);
    }
    }
      

  10.   

    我是用一个循环来把链表里的所有的直线都画出来,只执行一次OnDraw()可就是只出现第一条直线