snow(圣诞节的礼物)这个程序的思路是什么?
这个程序的下载地址在这里
http://www.xdowns.com/soft/6/15/2007/Soft_39601.html
原来是一个外国人写的,现在貌似有不少中国版的了。
我也想写一下,但是我想了很久没想出来思路。
我的思路是2个:
1:直接在桌面DC上画雪,雪花由3个白点形成,程序即时画出来。但是,雪花是飘动的,所以要每隔100ms擦除一次,而难点就在于这里。A:不能用InvalidateRect(NULL,NULL,false),就算给第二个参数一个很小的RECT也不行,桌面依然会严重闪烁。B:也不能用:先取一张先前的桌面DC预先保存,然后把这个DC覆盖上当前DC,因为用户时刻都可能切换桌面。C:每画一次雪花,就记录雪花所在点的颜色值,然后在下一次画雪花时把颜色值恢复。这个方法也不行,因为,一个是消耗CPU资源太厉害,另外一旦用户切换桌面,原来雪花所在的颜色值就改变了,不能用了。
2.在桌面之上做一个完全透明的全屏窗体,在这个窗体上画飘动的雪花,这个窗体是鼠标穿透的。但是这个方法问题肯定存在。如何做到此窗体上的雪花不透明,而其他统统透明?会不会这个顶层窗体与其他程序冲突?等等。
啊,真的是没有思路,希望高手帮助。