我现在的做法是:1,在view类里添加变量m_pStart2,在CDrawView::OnLButtonDown里记录起始位置:
m_pStart = point;3,在CDrawView::OnLButtonUp里开始画直线
  CClientDC dc(this);  
  dc.MoveTo(m_pStart);
  dc.LineTo(point);这种方法出现的问题是:
1,画线时,必须等待几秒钟后,才能看到直线在客户区显示
2,程序的大小发生变化时,如最大化,变大,缩小,则画上的直线全部消失请问这2个问题怎么解决,是不是我的画线方法不对??

解决方案 »

  1.   

    1。应该是左键抬起的时候才会出现画的线,因为你本来就是在这个事件中画的2。要想让画的东西保留住,应该在OnPaint函数中进行画线的操作
      

  2.   

    记录点的位置,然后在OnDraw里画
      

  3.   

    老大,是记住所有的吗?OnDrew里边一起画???
      

  4.   

    窗口大小发生变化时窗口会发生重绘,所以会线会消失,你在OnDraw中画它就始终在窗口上了,因为窗口每次重绘都会调用OnDraw函数
      

  5.   

    在OnDraw里画图的,所有的画图,都在里边就行。
    在你的LButtonDown()里传递点参数就OK了
    {
    point2=point;//point2跟你定义的起始点一样
    Invalidate();//引起窗口重绘
    }
    在你的OnDraw()你就可以绘图了,这样子就不会消失了。
    是这个效果么?还是要做绘图板啊?还有啊 ,你的画线就是两个事件的响应啊,效果不好,只能鼠标松开才响应,也没有半天才响应啊。
      

  6.   

    1, 应该需要触发窗口重绘消息吧,不知道InvalidateRect()好用不。2, 由于你开始画的线是一次性的,你必须记住特性(比如直线是 两个端点位置)再 Ondraw函数中每次都重新绘制出来。举个例子 你用投影看电影, 荧幕就是画布,投影机可以简单认为是画图程序,每次都由投影将前面的磨掉在重画,如果将投影遮住(擦掉), 荧幕上就没有画面了
      

  7.   

    要通知重绘,InvalidateRect()或RedrawWindow()或UpdateWindow();
      

  8.   

    你的第一个问题应该是你的机器或系统的问题,不会这么慢的。
    第二个问题如果想在重绘时画的线仍然生效,要在CDocument的派生类里将你画过的首尾点序列化到文件里,之后在CView类的OnDraw函数里重绘保存的点。