我想做一个画线的程序:通过OnLButtonDown,OnMouseMove,OnLButtonUp事件可是出现的问题是:
   1.如果在OnLButtonUp进行画,结果是在鼠标抬起的时候才开始画线,没有画线过程
   2.如果在OnMouseMove进行画,鼠标一动就画出很多直线。如果在画线前用InvalidateRect则画不出整线来,只画出一些小线头,不知为什么;
   各们大侠,不知如何解决这个问题?谢谢!!!!!
   

解决方案 »

  1.   

    在OnLButtonDown时记录起始点的位置,在OnLButtonUp画图另外,要考虑捕获鼠标消息,see SetCapture() & ReleaseCapture()in msdn
      

  2.   

    橡皮筋问题。在OnMouseMove中画当前线条,并把上一条线条擦除。
      

  3.   

    另外,可以把绘画模式设置成XOR模式,画了一次后再画一次就恢复成背景了。
      

  4.   

    CPoint oldPoint;
    CPoint srcPoint;void CMyView::OnMouseMove(UINT nFlags, CPoint point) 
    {
        CClientDC dc(this);
        dc.SetROP2(R2_XORPEN);
        dc.MoveTo(srcPoint);
        dc.LineTo(oldPoint);
        dc.MoveTo(srcPoint);
        dc.LineTo(point);
        oldPoint = point;

        CView::OnMouseMove(nFlags, point);
    }
      

  5.   

    void CMyView::OnMouseMove(UINT nFlags, CPoint point) 
    {
       if(nFlags&MK_LBUTTON)==MK_LBUTTON)
      {
        
         CClientDC dc(this);
         dc.MoveTo(m_iPrevx,m_iPrevy);
         dc.LineTo(point.x,point.y);
         m_iPrevx=point.x;
         m_iPrevy=point.y;
       }
       CDialog::OnMouseMove( nFlags,  point) ;
      } 
        void CMyview::  OnLButtonDown(UINT nFlags,CPoint point)
      {
         m_iPrevx=point.x;
         m_iPrevy=point.y;
         CDialog::OnLButtonDown(nFlags,point);
       }
      

  6.   

    OnLButtonDown(UINT nFlags, CPoint point) :
    原点=point; //第一点为直线的起点
    上一点=point; //记录本次点中点OnMouseMove(UINT nFlags, CPoint point)
    SetROP2(R2_NOT):
    MoveTo(原点); 
    LineTo(上一点);  //擦除上一条线
    MoveTo(原点);
    LineTo(point);      //画到鼠标移动点的直线
    上一点=point;  
    OnLButtonUp(UINT nFlags, CPoint point) :
    第一点=原点;
    第二点=point;