在VC的视图窗口中实现画直线,怎样实现如下功能1,点左键定坐标位,
2,拖动鼠标画直线,
3,放开鼠标完成画线第1和第3没问题,但是在第2步拖动鼠标时如果鼠标振动就会画出很多线条,这时如果刷新屏的话,屏就会很闪烁,请问有什么好方法简单画出两点直线

解决方案 »

  1.   

    鼠标按下时记下该点坐标,鼠标松开时记下第二个点坐标,在ondraw函数里moveto一个点,再lineto第二个点
      

  2.   

    这个有点类似选择的橡皮框!楼主查一下橡皮线的画法!有擦除、贴图两种!
    擦除,是使用CDC::SetROP2,但是,处理不好的话,会脏的!
    贴图就方便了,每次在基本图上面画出当前的线,然后贴出来!效果较好,就是双缓冲!
      

  3.   

    用SetROP2设置绘图模式,再利用橡皮条技术反画,就不会出现很多线条了
      

  4.   

    好像是SetROP2(R2_NOTXORPEN),LZ看看Windows程序设计上面的讲解就明白了,不行就到下载频道随便下个画图代码看看
      

  5.   

    一例
    void CMSView::OnMouseMove(UINT nFlags, CPoint point)
    {
    if(nFlags & MK_LBUTTON)
    {
    CClientDC dc(this);
    // 变换系统座标,保存为逻辑座标
    OnPrepareDC(&dc);
    dc.DPtoLP(&point); // 橡皮圈
    dc.SetROP2(R2_NOT);
    m_pCurShape->Draw(&dc);
    m_pCurShape->Update(point);
    m_pCurShape->Draw(&dc);
    }
    }
    移动画线时需要画两次,第一次的目的是擦掉上一次的线,第二次是在新的位置画线。
      

  6.   

    直线起点记为:  start_pt
    拖动鼠标时,前一个位置 记为: old_pt, 
    当前位置记为 curt_pt, 将 start_pt 和 old_pt 连起来,并且将该线的颜色设为白色,以达到擦去该线的目的
    再将start_pt 和curt_pt 连起来,将该线的颜色设为默认(黑色)即可
      

  7.   

    实现拖动鼠标画直线:
    void CTest2View::OnMouseMove(UINT nFlags, CPoint point) 
    {
    m_MouseDownPoint=point;
    m_m_OldPoint=point;
    }void CMSView::OnMouseMove(UINT nFlags, CPoint point)
    {
    CClientDC dc(this);
    dc.SetROP2(R2_NOT);
    if( m_OldPoint != point)
      {
    dc.MoveTo(m_MouseDownPoint);//m_MouseDownPoint记录鼠标按下的点
    dc.LineTo(m_OldPoint);
    dc.MoveTo(MouseDownPoint);
    dc.LineTo(point);
    m_OldPoint=point;
      }
    }
      

  8.   

    1.定义起始位置点
    CPoint m_pStart;
    2.在OnLButtonDown(UINT nFlags, CPoint point)中
    m_pStart = point;
    3.在OnLButtonUp(UINT nFlags, CPoint point)中
    HDC hdc = ::GetDC(m_hWnd);
    MoveToEx(hdc,m_pStart.x,m_pStart.y,NULL);
    LineTo(hdc,point.x,point.y);
    ::ReleaseDC(m_hWnd,hdc);