搜索
查看: 4246|回复: 10
打印 上一主题 下一主题

桌面下雪小程序

[复制链接]
跳转到指定楼层
楼主
发表于 2013-1-15 11:38:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 2420015589 于 2013-1-15 11:42 编辑

#include <windows.h>
#include<time.h>
const int ScrnWidth=1024;
const int ScrnHight=768;
const long SnowCol =0xFEFFFE;
const long SnowColDown =0xFFFFFF;
const long SnowColDuck =0xFFDDDD;
const int SnowNum = 500;
const int ID_TIMER = 1;
const char g_szClassName[] = "myWindowClass";
typedef struct POINTAPI
{
long x;
long y;
}a;
static HDC hDC1;
static struct POINTAPI pData[500];
static long pColor[500];
static int Vx,Vy,PVx,PVy,timecont;
long Abs(long num)
{
if(num>=0)return(num);
else return(-num);
}
int Random(int max)
{
return(rand()%max);
}
int InitP(int i)
{
pData.x=Random(ScrnWidth);
pData.y = Random(5);
pColor = GetPixel(hDC1, pData.x, pData.y);
return 0;
}
long GetContrast(int i)
{
long ColorCmp;
long tempR;
long tempG;
long tempB;
int Slope;
if(PVy!=0) Slope = PVx / PVy;
else Slope = 2;
if(Slope==0) ColorCmp = GetPixel(hDC1, pData.x, pData.y + 1);
else if(Slope > 1) ColorCmp = GetPixel(hDC1, pData.x + 1, pData.y + 1);
else ColorCmp = GetPixel(hDC1, pData.x - 1, pData.y + 1);
if(ColorCmp==SnowCol)return 0;
tempB = Abs((ColorCmp>>16)&0xff - (pColor>>16)&0xff);
tempG = Abs((ColorCmp>>8)&0xff - (pColor>>8)&0xff);
tempR = Abs((ColorCmp)&0xff - (pColor)&0xff);
return((tempR + tempG + tempB) / 3);
}
void DrawP(void)
{
int i;
for(i=0;i<SnowNum;i++)
{
if(pColor!=SnowCol&&pColor!=-1)SetPixel(hDC1, pData.x, pData.y, pColor);
PVx = Random(2) - 1 + Vx * (i % 3);
PVy = Vy * (i % 3 + 1);
pData.x = pData.x + PVx;
pData.y = pData.y + PVy;
pColor = GetPixel(hDC1, pData.x, pData.y);
if(pColor ==-1)InitP(i);
else
if(pColor!=SnowCol)
if (Random(16) > 5 || GetContrast(i) < 50)SetPixel(hDC1, pData.x, pData.y, SnowCol);
else
{
SetPixel(hDC1, pData.x, pData.y - 1, SnowColDuck);
SetPixel(hDC1, pData.x - 1, pData.y, SnowColDuck);
SetPixel(hDC1, pData.x + 1, pData.y, SnowColDown);
InitP(i);
}
}
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_TIMER:
{
if(timecont>200)
{
timecont=0;
Vx = Random(4) - 2;
Vy = Random(2) + 2;
}
else timecont+=1;
DrawP();
}
break;
case WM_CREATE:
{
int j;
srand(time(0));
Vx = Random(4) - 2;
Vy = Random(2) + 2;
for(j = 0;j<SnowNum;j++)
{
pData[j].x = Random(ScrnWidth);
pData[j].y = Random(ScrnHight);
pColor[j] = GetPixel(hDC1, pData[j].x, pData[j].y);
}
SetTimer(hwnd, ID_TIMER, 10, NULL);
hDC1 = GetDC(0);
timecont=0;
}
break;
case WM_CLOSE:
ReleaseDC(0, hDC1);
DestroyWindow(hwnd);
break;
case WM_DESTROY:
KillTimer(hwnd, ID_TIMER);
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int main(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "窗体注册失败!", "错误!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
g_szClassName,
"屏幕飘雪",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
NULL, NULL, hInstance, NULL);
if(hwnd == NULL)
{
MessageBox(NULL, "窗体创建失败!", "错误!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}


1.png (174.31 KB, 下载次数: 9)

1.png

桌面积雪小程序.zip

36.11 KB, 下载次数: 140

点此下载...

沙发
发表于 2013-1-21 14:32:14 | 只看该作者
没想到让屏幕飘个雪都这么困难!

点评

学海无涯 . . . 啊 ! ! ! 因为这是C语言  发表于 2013-1-22 08:49
板凳
发表于 2013-3-14 21:14:31 | 只看该作者
好复杂啊,我完全看不懂啊!!!!!!!!!
地板
发表于 2013-3-20 20:26:15 | 只看该作者
{:soso_e179:}
5#
发表于 2013-3-21 13:18:22 | 只看该作者
不敢想象,太厉害了
6#
发表于 2013-4-17 20:09:00 | 只看该作者
佩服的物体投递,厉害
7#
发表于 2013-4-19 15:48:38 | 只看该作者
强大!以后来琢磨是怎么回事!!
8#
发表于 2013-7-18 23:15:47 | 只看该作者
复制粘贴代码,编译未成功~!
9#
发表于 2013-7-22 21:04:49 | 只看该作者
{:soso_e179:}
10#
发表于 2013-8-27 11:19:14 | 只看该作者
看不懂
11#
发表于 2015-8-8 16:15:27 | 只看该作者
CiCi 发表于 2013-7-18 23:15
复制粘贴代码,编译未成功~!

vc可编译成功。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表