正文

LINEDDA(2)2006-12-16 13:39:00

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

分享到:

在(1)中我们已经讨论LINEDDA的使用了.但慢速画线只是一个简单的应用,下面让我们看一下它的有趣一面.   在有些程序中,经常需要用户单击来确定一片区域,然后获得其基本信息,实现了简单的查询功能.那么在单击时我们是不是可以产生一些效果呢?   来看下面这个基于SDI的程序:(除了下面所叙述的,没做任何其他操作)   它的效果是在以点击处为中心, 由2条直线组成,4个端点同时开始绘制,沿直线向中心靠拢, 绘制一个标准的”叉”,然后慢慢消失,实现了漂亮的点击效果.     (首先是缓缓绘制出来,然后缓缓消失)        //全局变量设置 int x,y; int a1,b1; int a2,b2; int a3,b3; const int z=10;                                                                                 // 左键按下 void CLineDDAView::OnLButtonDown(UINT nFlags, CPoint p) {        // TODO: Add your message handler code here and/or call default        CClientDC dc(this);          //设置反色绘制模式        dc.SetROP2(R2_NOT);              // 初始化        Ini(p.x,p.y);               //创建一个线程,绘制1条直线        HANDLE h=CreateThread(NULL,0,RecvProc,(LPVOID)&dc,0,NULL);        CloseHandle(h);          //调用函数,绘制另一条直线,终点是单击处,即中心.        ::LineDDA(p.x-z,p.y+z,p.x,p.y,hehe,(LPARAM)&dc);          //以下是慢慢消失的过程,和绘制模式有关系        Ini(p.x,p.y);         h=CreateThread(NULL,0,RecvProc,(LPVOID)&dc,0,NULL);        ::LineDDA(p.x-z,p.y+z,p.x,p.y,hehe,(LPARAM)&dc);          CView::OnLButtonDown(nFlags, p); }     void CALLBACK CLineDDAView::hehe(int a,int b,LPARAM l) {        // 以单击处为对称中心,一条直线从首尾端点同时绘制          CDC *pDC=(CDC*)l;        pDC->MoveTo(a1,b1);        pDC->LineTo(a,b);          pDC->MoveTo(2*x-a1,2*y-b1);//一点几何对称知识        pDC->LineTo(2*x-a,2*y-b);        a1=a;        b1=b;        ::Sleep(30);//该时间不能比下面的短,否则报错 } DWORD CALLBACK CLineDDAView::RecvProc(LPVOID l) {        CDC *dc=(CDC*)l;        ::LineDDA(a2,b2,x,y,haha,(LPARAM)l);        return 0; } void CALLBACK CLineDDAView::haha(int a,int b,LPARAM l) {        // 以单击处为对称中心,一条直线从首尾端点同时绘制   CDC *pDC=(CDC*)l;        pDC->MoveTo(a2,b2);        pDC->LineTo(a,b);        pDC->MoveTo(2*x-a2,2*y-b2);        pDC->LineTo(2*x-a,2*y-b);        a2=a;        b2=b;        ::Sleep(30); }   void CLineDDAView::Ini(int p,int q) {            x=p;        y=q;        a1=x-z;        b1=y+z;        a2=x-z;        b2=y-z;   }       当然这里也可以不创建线程来画另外一条直线,不过数学几何上要复杂一点,在此不多论述.

阅读(5683) | 评论(0)


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

评论

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