TLines.cpp
上传用户:wenliang_x
上传日期:2013-05-26
资源大小:19k
文件大小:2k
源码类别:

屏幕保护

开发平台:

Visual C++

  1. #include "TLines.h"
  2. static const int vRange = 12;    //速度变化范围
  3. static const int scrwth=GetSystemMetrics(SM_CXFULLSCREEN);   //窗口宽度
  4. static const int scrhgt=GetSystemMetrics(SM_CYFULLSCREEN)+40;//窗口高度
  5. void TLines::Draw(HWND hwnd)  //画线,整个程序写的最关键函数
  6. {
  7.    int i,j;   //定义两个计数器
  8.    HDC hdc;   //Windows系统类型,窗口的设备环境
  9.    HPEN oldpen,newpen,ReverseNewPen;  //Windows系统类型,画笔   
  10.    //获取该窗口的设备环境
  11.    hdc=GetDC(hwnd);
  12.    newpen=CreatePen(PS_SOLID,1,RGB(color.nRed,color.nGreen,color.nBlue));
  13.    oldpen = (HPEN)SelectObject(hdc,newpen);
  14.  //先保存原来的点,画出后NumOfPolygan组线时才擦画
  15.    for (i=0;i<NumOfPoint;i++) {
  16.   for (j=NumOfPolygan-1;j>0;j--) {
  17.      pt[i].Oldx[j]=pt[i].Oldx[j-1];
  18.      pt[i].Oldy[j]=pt[i].Oldy[j-1];
  19.   }
  20.   pt[i].Oldx[0]=pt[i].x;
  21.   pt[i].Oldy[0]=pt[i].y;
  22.    }
  23.    //是否跑到屏幕外,反弹
  24.    for (i=0;i<NumOfPoint;i++) {
  25.   if (pt[i].x>=scrwth)
  26.          { pt[i].vx=-rand()*vRange/RAND_MAX-1; ChangeColor(); }
  27.   else if (pt[i].x<=0)
  28.          { pt[i].vx=rand()*vRange/RAND_MAX+1;  ChangeColor(); }
  29.   if (pt[i].y>=scrhgt)
  30.          { pt[i].vy=-rand()*vRange/RAND_MAX-1; ChangeColor(); }
  31.   else if (pt[i].y<=0)
  32.          { pt[i].vy=rand()*vRange/RAND_MAX+1;  ChangeColor(); }
  33.  
  34.       pt[i].x=pt[i].x+pt[i].vx;
  35.       pt[i].y=pt[i].y+pt[i].vy;
  36.    }
  37.    //画线
  38.    MoveToEx(hdc,pt[0].x,pt[0].y,NULL);
  39.    for (j=0;j<NumOfPoint-1;j++)
  40.        LineTo(hdc,pt[j+1].x,pt[j+1].y);
  41.    LineTo(hdc,pt[0].x,pt[0].y);
  42.    Sleep(7);   //延迟0.007秒,控制速度!!!!
  43.    //擦去前NumOfPolygan的那条线
  44.    ReverseNewPen=CreatePen(PS_SOLID,1,RGB(0,0,0));
  45.    SelectObject(hdc,ReverseNewPen);
  46.    MoveToEx(hdc,pt[0].Oldx[NumOfPolygan-1],pt[0].Oldy[NumOfPolygan-1],NULL);
  47.    for (j=0;j<NumOfPoint-1;j++)
  48.   LineTo(hdc,pt[j+1].Oldx[NumOfPolygan-1],pt[j+1].Oldy[NumOfPolygan-1]);
  49.    LineTo(hdc,pt[0].Oldx[NumOfPolygan-1],pt[0].Oldy[NumOfPolygan-1]);
  50.    SelectObject(hdc,oldpen);
  51.    DeleteObject(newpen);
  52.    DeleteObject(ReverseNewPen);
  53.    ReleaseDC(hwnd,hdc);       //释放窗口的设备环境
  54. }
  55. void TLines::ChangeColor()  //改变颜色
  56. {
  57. if (rand()*10/RAND_MAX == 5) { //平均顶点撞击墙壁10次改变一次颜色   
  58.        color.nRed   = rand()*255/RAND_MAX;
  59.        color.nGreen = rand()*255/RAND_MAX;
  60.        color.nBlue  = rand()*255/RAND_MAX;
  61. }
  62. }