我想描述一个电子的运动轨迹。所需要的效果是这样的:一个点按照椭圆轨迹运动,同时这个椭圆一竖直直线(即z轴)转动。我已经写好了计算电子每一时刻的坐标函数,也就是说我可以在每一个时刻提供电子的三维坐标。我准备同SetPixvel()函数来画点。就是动画的部分不会做。
    曾蒙BackHome兄指点,方法大致有了,可是没法实现,我的windwos编程基础太差,不知道怎么按照BackHome兄的指点去做。http://expert.csdn.net/Expert/topic/2326/2326879.xml?temp=.8532221
    又蒙babaoshan兄的耐心讲解,教我怎么用OpenGL,OpenGL我是会点了,可是我还是无法实现自己的程序。http://expert.csdn.net/Expert/topic/2371/2371363.xml?temp=6.464785E-02
    今天,我仍不放弃,希望哪位能够仔细的为我讲解一下。我不需要效果很漂亮。只需要能示意就可以了。希望大家能帮一个忙,小弟不胜感激!

解决方案 »

  1.   

    用个计时器settimer();然后处理wm_timer消息,画一个点,然后抹掉前一个点。
      

  2.   

    to goodboyaxj:
    怎么做啊?请说详细点,最好能举例OnDraw()函数怎么写?
      

  3.   

    void xxx::OnDraw(CDC *pDC)
    {
     pDC->SetPixvel(x,y);//x,y自己算
     }void xxx::OnTimer()
    {
     Invalidate();
    }
      

  4.   

    我的想法是创建一个线程,而不用OnTimer,最起码不要用Invalidate,自己画需要要的东西。
      

  5.   

    InvalidRect()中的两个参数怎么加啊?第一个参数是什么类型?怎么用呢?
      

  6.   

    我觉得你可以用橡皮线的思想模拟椭圆的转动效果及点的运动轨迹,
    橡皮线的画法(以直线为例):
     方法:得到设备环境指针,得到原来的绘图模式,得到原来的画笔,设置画笔,从起点画到前一个点,
     然后再从起点画到当前点,恢复画笔,恢复画图模式。
    Draw()
    {
    CClientDC clientDC(theView) ; // 得到设备环境指针 //theView为当前视图。
    int n = GetROP2(clientDC.GetSafeHdc()); // 得到原来的绘图模式
    CPen* pOldPen;
    if (m_Pen)
    pOldPen= clientDC.SelectObject(m_Pen); // 得到原来的画笔
    clientDC.SetROP2(R2_XORPEN);//设置画笔
        clientDC.MoveTo(m_begin); //移到起点
    clientDC.LineTo(prePos);//画到前一个点
    clientDC.MoveTo(m_begin); // 起点
    clientDC.LineTo(curPos);//当前点
    clientDC.SelectObject(pOldPen); // 恢复原来的画笔 
    clientDC.SetROP2(n); // 恢复原来的绘图模式
    }
    你可以把中间划直线这段换成划椭圆和点就可以达到你要的效果。
    接下来我们要做的工作就是确定在何时调用我们的画图函数,最
    简单的方法就是用个计时器settimer();然后处理wm_timer消息,
    在OnTimer()内设置时间间隔,调用画图函数。
      

  7.   

    使用OnTime(),SetTimer,KillTimer,使用线程用sleep来控制速度可变速,你的三维坐标系到二维平面的映射最要封装成一个类,发给大家使用