嵌入屏幕的数字雨

数字雨壁纸

环境:easyX,VS2017或者VC6.0。
涉及知识:C/C++基本语法,easyX部分函数,windowsAPI函数:FindWindow,EnumWindows,
SendMessageTimeout,SetParent。以及其中回调函数的概念。
效果如下图在这里插入图片描述

initgraph函数的参数可自行更改,并在更改的同时修改数字雨回归开头的末尾坐标即可。
下附代码·。

#include<iostream>
#include<graphics.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<windows.h>
#define MAX 44 //字符串的数量
char name1[MAX][10];
int pos[MAX];
HWND g_workerw;//用来存储桌面句柄的句柄变量.
char name()//为一个字符随机赋值。
{
 char names;
 while (1)
 {
  names = rand() % 123;
  if (names >= 65 && names <= 90 || names >= 97 || names >= 48 && names <= 57)break;
 }
 return names;
}
void getnames()//获取字符的值
{
 int i, j;
 for (i = 0; i < MAX; i++)
 {
  for (j = 0; j <= 9; j++)
  {
   name1[i][j] = name();
  }
 }
}
void getpos()//获得坐标1
{
 int i;
 for (i = 0; i < MAX; i++)
 {
  pos[i] = rand() % 480;
 }
}
void rain()
{
  int i, j;
  for (i = 0; i < MAX; i++)
  {
   settextcolor(RGB(255, 255, 255));//还原字体颜色
   for (j = 0; j <= 9; j++)
   {
    outtextxy(i * 15, pos[i] - 15 * j, name1[i][j]);//设置当前一个字符的
    settextcolor(RGB(0, 255 - j * 27, 0));//随着一串字符的移动,从下向上颜色变浅。(表示当前字符的颜色)
   }
  }
  for (i = 0; i < MAX; i++)//此循环内每个字符的纵坐标位置向下移动8.
  {
   Sleep(1);
   pos[i] += 8;
  }
  for (j = 0; j <= MAX; j++)
  {
   if (pos[j] - 80 >= 480)pos[j] = 0;
  }//字符串末尾超出窗口边界,将其纵坐标还原到初始状态
 }
 BOOL CALLBACK EnumWndCallback(HWND tophandle, LPARAM topparamhandle)
{
 HWND p = FindWindowEx(tophandle, 0, L"SHELLDLL_DefView", 0);
 if (p != 0)
 {
  g_workerw = FindWindowEx(0, tophandle, L"WorkerW", 0);
 }
 return true;
}
int main()
{
 HWND hwnd = initgraph(640, 480);//该函数会返回一个创建的窗口的句柄。
 SendMessageTimeout(0, 0x052c, 0, 0, SMTO_NORMAL, 1000, 0);
 //发送全局的信息0x052c到计算机,这个信息会让计算机生成一个窗口类名为"WorkerW"的窗口
 EnumWindows(EnumWndCallback, 0);//通过回调函数反复查找我们生成的窗口"WorkerW"。
 if (g_workerw == 0)//如果没找到结束程序
 {
  closegraph();
  return 0;
 }
 SetParent(hwnd, g_workerw);//将桌面窗口设置为图形窗口的父窗口。
 setbkcolor(BLACK);//设置背景色
 getnames();
 getpos();//初始化坐标
 while (1)
 {
  getnames();
  BeginBatchDraw();
  cleardevice();
  rain();
  EndBatchDraw();
 }
 getchar();
 closegraph();
 return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值