正文

LINEDDA(1)2006-12-03 00:53:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yuqiexing/21211.html

分享到:

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

阅读(3208) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册