正文

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)的线,慢慢的被画出来。是不是很有意思啊?实际上还有很多用处。就看你的创新能力了。

阅读(5421) | 评论(0)


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

评论

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