桌面下雪的小程序 20

我希望找一个可以使桌面下雪的软件,就算动了鼠标它还是会一直下一直下,越积越厚,很好看的那种,希望亲们帮我寻找一下,谢谢啦~qq:947965903谢谢各位叻呐一楼哒很谢谢... 我希望找一个可以使桌面下雪的软件,就算动了鼠标它还是会一直下一直下,越积越厚,很好看的那种,希望亲们帮我寻找一下,谢谢啦~

qq:947965903 谢谢各位叻呐
一楼哒很谢谢内、、不过硪想要哒是内种越下越厚的、内提供的貌似不是哦。。 不过真的很感谢、这个其实也不错耐~
展开
 我来答
小Dqo
2010-01-17
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
查看文章
让你的桌面下起小雪系列之delphi编写2008年01月13日 星期日 下午 01:38这个冬天又没下雪;
那就让电脑来下雪吧;
以下是用delphi的全部代码;
program Snow;
uses
Windows, Messages;
const
SnowNumber = 500; // 雪点数量-1
type
SnowNode = record
Point: TPoint; // 雪点位置
Color: Integer; // 先前颜色
Speed: Integer; // 下落速率
nMove: Integer; // 下落距离
Stick: Integer; // '粘连'度
end;
var
SnowNodes: array[0..SnowNumber] of SnowNode; // 雪点数组
hTimer: Integer; // '随机风向'时钟句柄
CrWind: Integer; // 当前'风向' ( -1 ~ 1 )
CrStep: Integer; // 当前循环步数(用于限速)
ScreenWidth, ScreenHeight: Integer; // 屏幕尺寸

// 取屏幕尺寸 -> ScreenWidth, ScreenHeight
procedure GetScreenSize;
begin
ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
end;
// '随机风向'时钟
procedure TimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; dwTime: DWORD); stdcall;
begin
SetTimer(0, hTimer, (Random(27)+4) * 500, @TimerProc); // 重设下次风向改变时间
if (CrWind <> 0) then CrWind := 0 else CrWind := Random(3) - 1; // 修改风向
end;
// 初始化雪点数组
procedure InitSnowNodes;
var
hScreenDc, J: Integer;
begin
hScreenDc := CreateDC('DISPLAY', nil, nil, nil);
for J := 0 to SnowNumber do
begin
SnowNodes[J].Point.X := Random(ScreenWidth);
SnowNodes[J].Point.Y := Random(ScreenHeight);
SnowNodes[J].Color := GetPixel(hScreenDc, SnowNodes[J].Point.X, SnowNodes[J].Point.Y);
SnowNodes[J].Speed := Random(5) + 1; // 几次循环作下落一次 (1~5)
SnowNodes[J].nMove := Random(SnowNodes[J].Speed)+1; // 每次下落距离(1~5)
SnowNodes[J].Stick := 30 - Random(SnowNodes[J].Speed); // '粘连'度(几次循环作一次粘连判断)
end;
DeleteDC(hScreenDc);
end;
// 移动雪点 ..
procedure MoveSnowNodes;
var
hScreenDc, I, X, Y: Integer;
begin
hScreenDc := CreateDC('DISPLAY', nil, nil, nil);
for I := 0 to SnowNumber do
begin
// 控制雪点下降速率
if (CrStep mod SnowNodes[I].Speed) <> 0 then Continue;
// 恢复上次被覆盖点
if GetPixel(hScreenDc, SnowNodes[I].Point.X, SnowNodes[I].Point.Y) = $FFFFFF then
SetPixel(hScreenDc, SnowNodes[I].Point.X, SnowNodes[I].Point.Y, SnowNodes[I].Color);
// 根据风向作随机飘落
X := SnowNodes[I].Point.X + Random(3) - 1 + CrWind;
Y := SnowNodes[I].Point.Y + SnowNodes[I].nMove;
// 积雪(停留)效果处理
if ( (CrStep mod SnowNodes[I].Stick) = 0 ) // 降低积雪概率 ..
and ( GetPixel(hScreenDc, X, Y) <> GetPixel(hScreenDc, X, Y+1) ) // '边缘'判断
and ( GetPixel(hScreenDc, X-1, Y) <> GetPixel(hScreenDc, X-1, Y+1) )
and ( GetPixel(hScreenDc, X+1, Y) <> GetPixel(hScreenDc, X+1, Y+1) ) then
begin
// 稍微调整坐标
if GetPixel(hScreenDc, X, Y-1) = GetPixel(hScreenDc, X, Y-2) then Dec(Y) // 上边缘
else if GetPixel(hScreenDc, X, Y+1) = GetPixel(hScreenDc, X, Y+2) then Inc(Y); // 下边缘
Inc(X, CrWind);
// 画三个点(雪花)
SetPixel(hScreenDc, X, Y, $FFFFFF);
SetPixel(hScreenDc, X+1, Y+1, $FFFFFF);
SetPixel(hScreenDc, X-1, Y+1, $FFFFFF);
// 重生雪点
SnowNodes[I].Point.Y := Random(10);
SnowNodes[I].Point.X := Random(ScreenWidth);
SnowNodes[I].Color := GetPixel(hScreenDc, SnowNodes[I].Point.X, SnowNodes[I].Point.Y);
end else
begin
if (X < 0) or (X > ScreenWidth) or (Y > ScreenHeight) then // 超出范围则重生雪点
begin
SnowNodes[I].Point.Y := Random(10);
SnowNodes[I].Point.X := Random(ScreenWidth);
SnowNodes[I].Color := GetPixel(hScreenDc, SnowNodes[I].Point.X, SnowNodes[I].Point.Y);
end else
begin
// 保存颜色并绘制雪点
SnowNodes[I].Color := GetPixel(hScreenDc, X, Y);
SetPixel(hScreenDc, X, Y, $FFFFFF);
// 此时保存新雪点位置
SnowNodes[I].Point.X := X;
SnowNodes[I].Point.Y := Y;
end;
end;
end;
DeleteDC(hScreenDc);
Inc(CrStep);
end;
var
ThreadMsg: TMsg; // 标准消息结构体
Frequency: Int64; // 高性能定时器频率
StartCt, EndCt: Int64; // 高性能定时器计数
ElapsedTime: Extended; // 时间间隔
begin
Randomize; GetScreenSize; InitSnowNodes; // 初始化
QueryPerformanceFrequency(Frequency); // 高性能定时器频率
hTimer := SetTimer(0, 0, Random(5)*500, @TimerProc); // 安装随机风向定时器
RegisterHotKey(0, 0, MOD_CONTROL, ORD('L')); // 注册退出热键 Ctrl+L
while TRUE do // 消息循环
begin
QueryPerformanceCounter(StartCt); // 执行运算前 计数值
if PeekMessage(ThreadMsg, 0, 0, 0, PM_REMOVE) then // 取到消息
begin
case ThreadMsg.message of
WM_TIMER:
TimerProc(0, 0, 0, 0); // 预设风向改变时间已到
WM_HOTKEY:
begin
KillTimer(0, hTimer); // 删除随机风向定时器
UnregisterHotKey(0, 0); // 删除退出热键 Ctrl+L
InvalidateRect(0, nil, TRUE); // 刷新屏幕
Break; // 跳出消息循环
end;
WM_DISPLAYCHANGE:
begin
GetScreenSize; // 重新取屏幕尺寸
InitSnowNodes; // 初始化雪点数组
end;
end;
end;
MoveSnowNodes; // 移动雪点
QueryPerformanceCounter(EndCt); // 执行运算后计数值
ElapsedTime := (EndCt-StartCt)/Frequency;
if (ElapsedTime < 0.0005) then Sleep(2) // 简单限速
else if (ElapsedTime < 0.0010) then Sleep(1)
else if (ElapsedTime < 0.0015) then Sleep(0);
end;
end.

参考资料:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
694835214
2010-01-12
知道答主
回答量:9
采纳率:0%
帮助的人:0
展开全部
你是说这个吗?进去下载吧

参考资料: http://hi.baidu.com/pplzkl/blog/item/43b8a8d33973553f960a167a.html

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友ce6acdd
2010-01-16 · TA获得超过164个赞
知道答主
回答量:17
采纳率:0%
帮助的人:0
展开全部
话说 我知道捏
想知道嚒
嘻嘻
猜猜!~》》。。

参考资料: 妈妈肚里 欸

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jyysll
2010-01-14
知道答主
回答量:4
采纳率:0%
帮助的人:0
展开全部
那个好像有病毒的呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式