小弟目前用单文档编写路径规划东东,在Doc中处理算法数据,
DOC 中定义
CPoint Point;
double radius;记录当前规划路径上的点,
在view类中定义了显示这个点的函数void CPathView::draw(CPoint point,double r);
如何能够实时调用draw函数显示轨迹呢?求助!!先谢谢大家了!!!

解决方案 »

  1.   

    大体思路是设置计时器,频率看你要求刷新的频率,OnTimer中绘制,UpdateWindow();试试看吧,应该没问题的
      

  2.   

    void CPathView::OnPotential()//菜单按钮命令
    {
    SetTimer(1,10,NULL);
    CPathDoc *PDoc=GetDocument();
    PDoc->Potential();//执行路径规划算法
    // TODO: Add your command handler code here
    }
    void CPathView::OnTimer(UINT_PTR nIDEvent)//定时器
    {// TODO: Add your message handler code here and/or call default
    CDC *pDC=GetDC(); 
    OnDraw(pDC); 
    ReleaseDC(pDC);
    CView::OnTimer(nIDEvent);
    }
    void CPathView::OnDraw(CDC* pDC)
    {
    CPathDoc *pDoc=GetDocument();
    temp_point=pDoc->Point;//计算的当前点信息
    RRr=pDoc->radius;
    CBrush brush;
    brush.CreateSolidBrush(RGB(255,0,0));
    if(pDC->GetSafeHdc())
    {pDC->SelectObject(brush);
    pDC->Ellipse(temp_point.x-RRr,temp_point.y-RRr,temp_point.x+RRr,temp_point.y+RRr);
    // 轨迹绘制
    }
    UpdateWindow();
    }
    可是还是不行,有一点我的路径规划函数是执行多线程的,即可以同时进行多粒子动态规划,线程函数里设定没计算到下一个点就sleep(20),以便能放慢速度好观察。
    之前的程序可以运行的,效果也不错,我是把所有东西都放在View类里,现在我把绘图和计算分开了,就不行了,看不出效果了,求求大家帮帮忙!
      

  3.   

    不要在ontimer里直接调用ondraw,用Invalidate()代替
      

  4.   

    //UpdateWindow(); 另外brush选入DC后还要选出;另外在OnTimer中Invalidate即可,不用自己获取DC。
      

  5.   

    void CPathView::OnTimer(UINT_PTR nIDEvent)
    {
       Invalidate();
       CView::OnTimer(nIDEvent);
    }
    我改了以后只能在最后目标点看到,没有那种效果,
    “另外brush选入DC后还要选出”怎么办呢,谢谢,不懂就问哈,再次谢谢!