请问如何实现蝴蝶或其他位图从屏幕边角飞入中央的效果

fXck_Windows 2014-01-22 11:18:49
想写这样的效果。类似于蝴蝶或者其他小的图片,一个个从屏幕的边角或者一块地方出现,飞入屏幕中央然后消失

因为不是在窗口的客户区里绘图,所以我就我试着使用GetDC(NULL)来获得整个屏幕的DC
然后在上面绘图。但是效果非常差。其他窗口一改变就不断闪,同时绘图过的地方会残留痕迹,只有通过右键刷新桌面或其他方式才能清除掉,而且直接在屏幕的DC上绘图会导致电脑非常卡。

看来通过获得屏幕DC来绘图是办不到的了。请问有没有其他办法能实现这样的效果?



对了,还有另一个也许有点关系的问题。驱动精灵的安装程序在安装时的效果是这样的。



请问这效果可以通过什么方式实现?Layered Window吗?
...全文
213 点赞 收藏 17
写回复
17 条回复
fXck_Windows 2014年01月24日
引用 9 楼 zhao4zhong1 的回复:
http://www.codeproject.com/Articles/29184/A-lovely-goldfish-desktop-pet-using-alpha-PNG-and
就是这个效果。看来用的是Layered Window。 不过我只会最简单的GDI绘图。updatelayeredwindow搞了半天还没学会怎么用(有点笨) 看来得找本图形编程相关的书狠狠补补了…………
回复 点赞
fXck_Windows 2014年01月24日
引用 8 楼 schlafenhamster 的回复:
参考我的“桌面小球.zip” 0分 http://download.csdn.net/detail/schlafenhamster/4362660 “包含3个工程。 1。DeskBallBmp 一个圆位图在桌面上移动,但圆内有闪烁。 2。DeskBallCli 一个圆位图在带背景的客户区内移动,圆内无闪烁。 3。DeskBallWin 一个圆型窗口在桌面上移动,圆内无闪烁。” 注意 3.
十分感谢!例子我看了。第三个似乎是通过剪裁区域实现的? 但是这样的话对于类似于蝴蝶或其他边飞行边扇翅膀的窗口来说,剪裁区域似乎不太好实现?想了半天也许还是Layered Window加载带透明通道的png更好?
回复 点赞
赵4老师 2014年01月24日
引用 7 楼 schlafenhamster 的回复:
MSDN 帮助有 一个 “mosqito” 蚊子的 例子, 就是一个 蚊子 在 屏幕上 飞。 找找看。
MSDN98\SAMPLES\VC98\SDK\GRAPHICS\DIRECTX\MOSQUITO\*.*
回复 点赞
lgstudyvc 2014年01月24日
必须学习!
回复 点赞
allenhiman 2014年01月24日
嗯 layered window 完全可以胜任
回复 点赞
schlafenhamster 2014年01月24日
那个 蚊子 是 DDX directshow 的, 现在 已经 落后了 , 你 可以 看看 D3D
回复 点赞
fXck_Windows 2014年01月24日
引用 11 楼 zhao4zhong1 的回复:
[quote=引用 7 楼 schlafenhamster 的回复:] MSDN 帮助有 一个 “mosqito” 蚊子的 例子, 就是一个 蚊子 在 屏幕上 飞。 找找看。
MSDN98\SAMPLES\VC98\SDK\GRAPHICS\DIRECTX\MOSQUITO\*.*[/quote] 原来在6.0里。难怪2010,2012的msdn怎么找都找不到……
回复 点赞
噜sir 2014年01月23日
LZ是做前端的?我不是很懂哎。我是做MFC的,MFC上做类似的效果,可以如下实现: 1、绘一个背景透明的Button(本人试过Picture,没法插ico); 2、做一个定时器; 3、获取Button的当前位置; 4、Button位置按特定函数修改,刷新Button位置; 5、利用2中定时器,每隔固定时间进行3、4步操作。 PS:1、如果要求高的话,定时器最好自己做; 2、亲测,可以同时刷新多个图片,且只要设置的好,不会有闪、抖动等情况
回复 点赞
晒月光的青蛙 2014年01月23日
用memory DC的方法绘图啊,就不会一直闪了
回复 点赞
fXck_Windows 2014年01月23日
引用 4 楼 schlafenhamster 的回复:
"异形窗口"
噢噢噢噢噢噢,看来的确是这个 这个实际上用的就是Layered Window?
回复 点赞
fXck_Windows 2014年01月23日
引用 2 楼 u011953967 的回复:
LZ是做前端的?我不是很懂哎。我是做MFC的,MFC上做类似的效果,可以如下实现: 1、绘一个背景透明的Button(本人试过Picture,没法插ico); 2、做一个定时器; 3、获取Button的当前位置; 4、Button位置按特定函数修改,刷新Button位置; 5、利用2中定时器,每隔固定时间进行3、4步操作。 PS:1、如果要求高的话,定时器最好自己做; 2、亲测,可以同时刷新多个图片,且只要设置的好,不会有闪、抖动等情况
倒不是前端开发啦,我纯粹是对编程有兴趣,想要实现这样的效果 MFC因为C++学得不扎实导致看得太吃力就没动……如果是MFC的Button类的话,也许就是Button窗口类?等会我试试看搞个自绘按钮看看 对了,Button要指定父窗口的吧。像要实现我蝴蝶屏幕飞的效果的话,父窗口该指定哪个? 或者不指定就当做顶层窗口来用?
回复 点赞
schlafenhamster 2014年01月23日
"异形窗口"
回复 点赞
fXck_Windows 2014年01月23日
引用 1 楼 xsgluozi 的回复:
用memory DC的方法绘图啊,就不会一直闪了
memory DC? 如果是建立个和屏幕兼容的内存DC,在上面绘图,然后Bitblt到屏幕上的话照样还是会闪的啊。屏幕上的图标或窗口一刷新就闪。并且在运行的时候,如果我最小化了屏幕上其他程序的窗口或者更改了其他什么东西,用内存DC的话没办法追踪这些变化……
回复 点赞
cclutpk 2014年01月23日
overlay中很简单的例子
回复 点赞
schlafenhamster 2014年01月23日
参考我的“桌面小球.zip” 0分 http://download.csdn.net/detail/schlafenhamster/4362660 “包含3个工程。 1。DeskBallBmp 一个圆位图在桌面上移动,但圆内有闪烁。 2。DeskBallCli 一个圆位图在带背景的客户区内移动,圆内无闪烁。 3。DeskBallWin 一个圆型窗口在桌面上移动,圆内无闪烁。” 注意 3.
回复 点赞
schlafenhamster 2014年01月23日
MSDN 帮助有 一个 “mosqito” 蚊子的 例子, 就是一个 蚊子 在 屏幕上 飞。 找找看。
回复 点赞
发动态
发帖子
界面
创建于2007-09-28

7977

社区成员

11.5w+

社区内容

VC/MFC 界面
社区公告
暂无公告