呵呵,看到这个题目你可能马上就想起了计算机图形学上的直线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)的线,慢慢的被画出来。是不是很有意思啊?实际上还有很多用处。就看你的创新能力了。
评论