- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
异形窗口与gif动画(带透明背景)的实现
kk 这次给大家介绍异形窗口与gif动画(带透明背景)的实现。
--------------------------
你可以了解到:
异形窗口的实现
Gif多帧动画的实现
支持Gif透明背景动画
---------------------------
kk在做一个项目时,需要实现类似桌面精灵的程序。说的白一点就是像office 助手、瑞星狮子卡卡那样的动画效果。Ok,我们想到那不就是异形窗口吗,只不过是多了动画效果。那么如果我们能将一个gif的图片作为异形窗口,这个效果也就能满足我们的需求了。
那我们得到如下方案:
桌面精灵 = 异形窗口 + gif动画。
那我们搞定异形窗口,再搞定gif动画就ok了。
效果展示(两图是动画的不同帧,请仔细看)
--------------------------------------
异形窗口 —--- 层窗口
--------------------------------------
Ok,我们先来研究研究异形窗口。
一般来说,有两种方法:
窗口区域裁剪法
层窗口法
方法1是窗口区域裁剪法,这种方法一般是裁剪成若干几何形状的区域,再将那些区域组合,最后设置为窗口的区域。这种方法一般用于比较简单的几何形状区域,再进行贴图处理。kk在这里不详细讨论这种方法。
kk要详细讨论一下方法2----层窗口法。
MSDN推荐使用此方法,因为它灵活,功能强大。
层窗口的核心元素有两点:
第一:窗口的属性必须有WS_EX_LAYERED扩展属性,同时绝对不能是WS_CHILD属性。
第二:主动调用win32 API “SetLayeredWIndowAttributes”或者“UpdateLayeredWindow”。因为具有“层”属性的窗口不再响应WM_PAINT消息,所以你只有在调用了前面两个API中的一个之后,层窗口才可能被显示出来。其实对于UpdateLayeredWindow说“层窗口被显示出来”不太确切,更确切的说法应该是“兼容DC中的内容才能被画到目标DC上”。
这两个API原型如下:
BOOL?SetLayeredWindowAttributes(??????????HWND?hwnd,
????COLORREF?crKey,
????BYTE?bAlpha,
????DWORD?dwFlags
);
BOOL?UpdateLayeredWindow(??????????HWND?hwnd,
????HDC?hdcDst,
????POINT?*pptDst,
????SIZE?*psize,
????HDC?hdcSrc,
????POINT?*pptSrc,
????COLORREF?crKey,
????BLENDFUNCTION?*pblend,
????DWORD?dwFlags
);
SetLayeredWIndowAttributes的使用非常简单,因为它的参数非常明白,只要简单地填写上就ok了。它的功能是:设置整个窗体的透明度,或者透明掉某种颜色。今天的主角不是它,所以暂时不写例子,等以后谈到“层窗口与子控件显示”时才给出例子。
UpdateLayeredWindow,这个API非常强大,强大到有很多人都不会用它。
用一个图来说明一下它的几个参数的意义:
这里有个特别要注意的地方:psize 这个参数代表的“层窗口”size千万不能大于兼容DC的兼容位图的size,否则,Win32 API 函数UpdateLayeredWindow 将执行失败,GetLastError获取到的错误码是(8),意思是“存储空间不足,无法处理此命令”。
请切记!!!
异形窗口的理论部分到这里讲完了,各位应该可以自己动手去实现一下。
代码在后面会一起给出。
--------------------------------------
动画 —--- Gif
--------------------------------------
下面要介绍Gif多帧动画了。
大家一定见过Microsoft Office的助手精灵,或者瑞星杀毒软件的狮子卡卡了。那些动画的确很有意思。
今天我们用异形窗口中,再加上Gif多帧动画,差不多就能模仿这些精灵了。
Gif文件的结构大概如下图:
再稍微细一点的结构图如下所示:
Gif文件的每帧图像的延时时间信息就放在每个图像帧的“控制块”里,数据当然就放在“图像数据块”里。那么显示动画只要这个每帧的延时时间与每帧的图像就ok了。
动画的原理:我们了解了Gif文件的结构之后,我们可以按文件结构从Gif文件中取出相应的信息,再一帧一帧地画出图像来,就成了动画了。
但kk我今天要告诉大家,这个复杂的事情已经有人帮我们做了,谁??GDI+是也!!
对,Gd
文档评论(0)