呵呵,看到这个题目你可能马上就想起了计算机图形学上的直线DDA算法把。这个函数实际上已经被winapi包含了,可以用来做动画。介绍一下函数: void WINAPI LineDDA(int x1,int y1,int x2,int y2,LINEDDAPROC back,LPARAM l); 参数解释如下: x1,y1;//直线的起点坐标 x2,y2;//直线的终点坐标 back;//回调函数,就是通过DDA算法计算出直线上一个象素的坐标后就马上调用 l;//可传值参数 再介绍一下回调函数: typedef void (CALLBACK *LINEDDAPROC)(int x,int y ,LPARAM l) x,y;//计算出的象素点坐标 l; //是刚才的传递参数 呵呵,有了这么多,就可以做很多事情了哦!我举一小例说明 1。利用向导生成一个基于SDI的程序。 2。在视类中响应左键单击事件: void CLineDDAView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CClientDC dc(this); ::LineDDA(100,100,200,200,(LINEDDAPROC)hehe,(LPARAM)&dc); CView::OnLButtonDown(nFlags, point); } 3。声明回调函数为视类的静态成员函数: static void CALLBACK hehe(int a,int b,LPARAM l); 在源文件中定义: int a1=100,b1=100;//全局变量 void CALLBACK CLineDDAView::hehe(int a,int b,LPARAM l){ CDC *pDC=(CDC*)l; pDC->MoveTo(a1,b1); pDC->LineTo(a,b); a1=a; b1=b; ::Sleep(3);//暂停一会儿} 运行一下,你看到什么了,呵呵?就是从(100,100)到(200,200)的线,慢慢的被画出来。是不是很有意思啊?实际上还有很多用处。就看你的创新能力了。

评论