整个过程中一直显示直线状态,请问高手,如何实现??

解决方案 »

  1.   


    if(m_DrawType==1) //画直线
    {
    pDC->MoveTo(m_StartPoint);
    pDC->LineTo(m_EndPoint);
    }
    此段代码写于OnDraw()函数中,m_StartPoint起始点,m_EndPoint终点都是全局变量void CXXXView::OnLButtonDown(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default
    m_StartPoint=point; //起始点为鼠标按下的点
    CView::OnLButtonDown(nFlags, point);
    }void CXXXView::OnMouseMove(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default

    m_EndPoint=point; //终止点为鼠标当前位置
    Invalidate();

    CView::OnMouseMove(nFlags, point);
    }void CXXXView::OnLButtonUp(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default

    m_EndPoint=point; //终止点为鼠标当前位置
    Invalidate(); //刷新界面

    CView::OnLButtonUp(nFlags, point);
    }
      

  2.   

    主要是看你在什么位置加的画线代码.
    加在OnPaint中就OK,view的话加在OnDraw中也可以
      

  3.   

    楼主的意思是要画垂直线和水平线吗?在第二次单击鼠标的CLICK事件里把点击的位置取出来,把X或Y的位置改成第一次点击的位置便可。还是要实现移动鼠标的时候实时更新线条
    你可以用DC的SETROP2(R2_NOT)来实现。这个是用来画反色的。具体查查这个东东的用法你就知道。很好用的
      

  4.   

    pDC->MoveTo(X,Y);移到到此pDC->LineTo(X,Y);从上次移到的位置开始,连接直线 到设置的位置。
      

  5.   

    GDI的做法是
    pDC->MoveTo(X,Y);直线的起点pDC->LineTo(X,Y);直线的终点GDI+的就更简单的了,只是前提你要有GDI+库。可以去百度GOOGLE一下
      

  6.   

    使用文档序列化来保存数据,以防刷新的时候原来的图消失
    http://mmilmf.download.csdn.net/我这有个画图的程序你看下吧,如果还不行的,再给你个简单的例子
      

  7.   

    只能是把之前画过的点都保存起来,然后每次paint时再把这些点全画出来
      

  8.   

    看孙鑫的<<VC++深入详解>>,里边介绍的很详细的。楼主还要多看书啊。
      

  9.   

    你可以保存当前DC,就是从DC中将bitmap数据拿出来,下次画的时候再载入bitmap数据,在载入的基础上再画,没必要保存历史信息,除非你要做撤销操作才需要保存历史信息  CDC*pDC=GetDC(); 
      CRect rect; 
      GetClientRect(&rect);   PBYTE pBuffer;
      pBuffer = new BYTE[rect.Width()*rect.Height()*3];  CBitmap Bmp,*pBmp; 
      Bmp.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height());   CDC memDC; 
      memDC.CreateCompatibleDC(pDC); 
      pBmp=memDC.SelectObject(&Bmp); 
      memDC.BitBlt(rect.left, rect.top, rect.right, rect.bottom, pDC,0,0,SRCCOPY);   pBmp=memDC.SelectObject(pBmp); 
      pBmp->GetBitmapBits(rect.Width()*rect.Height()*3,pBuffer);
      pBuffer内的就是DC上画的RGB数据,至于载入的话可以用CBitmap::SetBitmapBits(),然后再SelectObject来做。
      或者干脆就不用取出RGB数据,直接保存Bmp也成。
      

  10.   

    画在内存DC中,
    然后每次要画新的线,继续加到内存DC中,再显示到屏幕。
    其中 ,内存DC实例应一直存在 。
      

  11.   

    用链表记录点,在OnPaint或OnDraw中遍历链表进行绘制