发明内容
本发明提供一种窗口动画实现方法和装置,可以克服现有技术中存在的窗口动画效率低下,窗口动画效果受限制的技术问题,可以在整个桌面区域范围内进行动画绘制,提高绘制效率,实现绚丽而丰富的窗口动画效果。
为达到上述发明目的,本发明提供了一种窗口动画实现方法,包括:
截获窗口事件,暂停对目标窗口的操作;
获取目标窗口的窗口位图;
创建用于缓存所述窗口位图的窗口缓冲区;
创建半透明画布窗口;
创建工作缓冲区并在所述工作缓冲区中,根据动画算法将所述窗口缓冲区中的窗口位图绘制成窗口动画;
将所述绘制的窗口动画输出到所述半透明画布窗口上进行动画显示。
其中,所述截获窗口事件,暂停对目标窗口的操作,包括:
截获系统的窗口WM_SHOWWINDOWN消息,截获显示或关闭目标窗口的事件;
若事件为显示目标窗口,则暂停对目标窗口进行显示的操作;
若事件为关闭目标窗口,则暂停对目标窗口进行关闭的操作。
其中,所述获取目标窗口的窗口位图,包括:
若事件为显示目标窗口,则根据所述窗口WM_SHOWWINDOWN消息,从缓存中获取待显示的目标窗口的窗口位图;
若事件为关闭目标窗口,则根据所述窗口WM_SHOWWINDOWN消息,从显示界面截取已显示的目标窗口的窗口位图。
其中,所述创建半透明画布窗口,包括:
判断所述目标窗口是否为半透明窗口;
若目标窗口是半透明窗口,则将该目标窗口作为半透明画布窗口;
若目标窗口为非半透明窗口,则创建全屏半透明画布窗口。
其中,当事件为关闭目标窗口时,所述若目标窗口为非半透明窗口,则创建全屏半透明画布之后,还包括:
将所述窗口缓冲区中存储的窗口位图提交到所述全屏半透明画布窗口;
将所述非半透明窗口不自绘隐藏。
相应的,本发明还提供了一种窗口动画实现装置,包括:
事件截获模块,用于截获窗口事件,暂停对目标窗口的操作;
窗口位图获取模块,用于获取目标窗口的窗口位图;
窗口缓冲区创建模块,用于创建缓存所述窗口位图的窗口缓冲区;
画布窗口创建模块,用于创建半透明画布窗口;
工作缓冲区创建模块,用于创建工作缓冲区;
窗口动画绘制模块,用于在所述工作缓冲区创建模块创建的工作缓冲区中,根据动画算法将所述窗口缓冲区中的窗口位图绘制成窗口动画;
动画显示模块,将所述窗口动画绘制模块绘制的窗口动画输出到所述半透明画布窗口上进行动画显示。
其中,所述事件截获模块,包括:
截获单元,用于截获系统的窗口WM_SHOWWINDOWN消息,截获显示或关闭目标窗口的事件;
事件判断单元,用于判断所述截获单元截获的事件为显示目标窗口或关闭目标窗口;
操作执行单元,用于在所述事件判断单元判断事件为显示目标窗口,暂停对目标窗口进行显示的操作;若判断事件为关闭目标窗口,则暂停对目标窗口进行关闭的操作。
其中,所述窗口位图获取模块,包括:
待显示位图获取单元,用于在所述事件判断单元判断事件为显示目标窗口时,根据所述截获单元截获的窗口WM_SHOWWINDOWN消息,从缓存中获取待显示的目标窗口的窗口位图;
已显示位图获取单元,用于在所述事件判断单元判断事件为关闭目标窗口时,根据所述截获单元截获的窗口WM_SHOWWINDOWN消息,从显示界面截取已显示的目标窗口的窗口位图。
其中,所述画布窗口创建模块,包括:
窗口判断单元,用于判断所述目标窗口是否为半透明窗口;
画布窗口初始化单元,用于在所述窗口判断单元判断所述目标窗口是半透明窗口,将该目标窗口作为半透明画布窗口;
画布窗口创建单元,用于在所述窗口判断单元判断所述目标窗口为非半透明窗口,创建全屏半透明画布窗口。
其中,所述画布窗口创建单元还用于所述事件判断单元判断事件为关闭目标窗口时,在创建全屏半透明画布之后,将所述窗口缓冲区中存储的窗口位图提交到所述全屏半透明画布窗口,并将所述非半透明窗口不自绘隐藏。
实施本发明提供的窗口动画实现方法和装置,通过获取目标窗口的窗口位图,根据该窗口位图绘制窗口动画,这种方式可以绘制出丰富的窗口动画效果,并且本发明还创建了半透明画布窗口,将绘制的窗口动画输出创建的半透明画布窗口上进行动画显示,由于半透明画布窗口没有区域局限性,因此不会出现如现有技术中的窗口动画时,超出窗口本身的部分被剪裁掉的缺陷。
具体实施方式
本发明提供一种窗口动画实现方法和装置,可以克服现有技术中存在的窗口动画效率低下,窗口动画效果受限制的技术问题,可以在整个桌面区域范围内进行动画绘制,提高绘制效率,实现绚丽而丰富的窗口动画效果。
为达到上述发明目的,本发明提供的一种窗口动画实现方法和装置是这样实现的:
参见图2,为本发明提供的一种窗口动画实现方法实施例一的流程示意图。
本实施例一提供的方法,包括:
步骤100,截获窗口事件,暂停对目标窗口的操作;
步骤101,获取目标窗口的窗口位图;
步骤102,创建用于缓存所述窗口位图的窗口缓冲区;
步骤103,创建半透明画布窗口;
步骤104,创建工作缓冲区并在所述工作缓冲区中,根据动画算法将所述窗口缓冲区中的窗口位图绘制成窗口动画;
步骤105,将所述绘制的窗口动画输出到所述半透明画布窗口上进行动画显示。
实施本发明提供的窗口动画实现方法,通过获取目标窗口的窗口位图,根据该窗口位图绘制窗口动画,这种方式可以绘制出丰富的窗口动画效果,并且本发明还创建了半透明画布窗口,将绘制的窗口动画输出创建的半透明画布窗口上进行动画显示,由于半透明画布窗口没有区域局限性,因此不会出现如现有技术中的窗口动画时,超出窗口本身的部分被剪裁掉的缺陷。
需要说明的是,本发明获取了目标窗口的窗口位图后,可以根据动画算法将其生成多样的窗口动画特效,例如2D甚至3D窗口动画特效,因此本发明提供的窗口动画效果不受局限,可以实现丰富多样的动画效果。
另外,窗口事件一般分为关闭窗口和显示窗口两种,本发明中,是通过截获系统的窗口WM_SHOWWINDOWN消息来实现截获显示或关闭目标窗口的事件的;在步骤100中,若截获的事件为显示目标窗口,则暂停对目标窗口进行显示的操作;若截获的事件为关闭目标窗口,则暂停对目标窗口进行关闭的操作。这里的暂停操作,实际上就是暂时停止执行对目标窗口的显示或关闭操作,而转为进行窗口动画的绘制和创建半透明的画布窗口。
还需要说明的是,针对显示目标窗口和关闭目标窗口,获取窗口位图的方式有所不同,下面将详细描述。
如前述,若截获的事件为显示目标窗口,则根据所述窗口WM_SHOWWINDOWN消息,从缓存中获取待显示的目标窗口的窗口位图。
具体而言,对于显示窗口来讲,此时用户界面上并没有窗口在显示,该窗口是处于即将被显示的状态,它被存放在缓存中,则本发明实施例中采取的技术方案是根据截获的WM_SHOWWINDOWN消息,在缓存中取查找该目标窗口的窗口位图,并将其获取出来,存放在创建的窗口缓冲区中。
反之,若事件为关闭目标窗口,则根据所述窗口WM_SHOWWINDOWN消息,从显示界面截取已显示的目标窗口的窗口位图。
具体而言,对于关闭窗口来讲,此时用户的显示界面上已经显示有目标窗口,因此只需要截取该目标窗口的位图,并将其保存在创建的窗口缓冲区中即可。
参见图3,为本发明提供的窗口动画实现方法实施例二的流程示意图。
本实施例二提供的方法将描述如何创建半透明画布窗口的流程,具体如下:
步骤200,判断所述目标窗口是否为半透明窗口;若目标窗口是半透明窗口,转入步骤201;若目标窗口为非半透明窗口,转入步骤202;
步骤201,将该目标窗口作为半透明画布窗口;
步骤202,创建全屏半透明画布窗口。
需要说明的是,在半透明画布窗口中进行动画显示,即可克服现有技术中存在的对窗口动画的尺寸造成限制,使得有一些窗口动画被剪裁,无法全部显示的问题,因此本发明实施例中,如果目标窗口本身就是半透明属性的,则直接将其作为半透明画布窗口;无论后续是要将目标窗口以动画的形式进行显示,还是以动画的形式关闭,都不自绘显示画布窗口。
如果目标窗口是非透明窗口,则需要创建一个新的全屏的半透明画布窗口。如果后续要将目标窗口以动画的形式进行显示,则不自绘显示画布窗口。但是后续要将目标窗口以动画的形式进行关闭时,也即当事件为关闭目标窗口时,则在创建全屏半透明画布之后,还需要将所述窗口缓冲区中存储的窗口位图提交到所述全屏半透明画布窗口,将原来的非半透明目标窗口不自绘隐藏,也即关闭原目标窗口,然后再显示动画关闭效果。这样一来使得用户感觉不到窗口在闪烁。
请参见图4,为本发明提供的窗口动画实现方法实施例三的流程示意图。
本实施例三将详细描述窗口动画实现方法的完整流程。
步骤300,截获窗口WM_SHOWWINDOWN消息。
具体的,通过窗口WM_SHOWWINDOWN消息截获窗口事件,暂停对目标窗口的操作。
步骤301,获取目标窗口的窗口位图;
步骤302,创建用于缓存所述窗口位图的窗口缓冲区;
步骤303,判断目标窗口是否为半透明窗口;若是,转入步骤304;若否,转入步骤307;
步骤304,将目标窗口作为半透明画布窗口;然后转入步骤306;
步骤305,判断所述窗口事件是显示窗口还是关闭窗口,若是显示窗口,则转入步骤306;若是关闭窗口,则转入步骤311;
步骤306,不自绘显示画布窗口;
步骤307,创建全屏半透明画布窗口;然后转入步骤308;
步骤308,判断所述窗口事件是显示窗口还是关闭窗口,若是关闭窗口,则转入步骤309;若是显示窗口,则转入步骤311;
步骤309,不自绘显示画布窗口;
步骤310,将获取的窗口位图提交到创建的全屏半透明画布窗口;
步骤311,创建工作缓冲区;
步骤312,根据动画算法将所述窗口缓冲区中的窗口位图绘制成窗口动画;
步骤313,将所述绘制的窗口动画输出到所述半透明画布窗口上进行动画显示。
最后销毁所述窗口动画。
实施本发明提供的窗口动画实现方法,通过获取目标窗口的窗口位图,根据该窗口位图绘制窗口动画,这种方式可以绘制出丰富的窗口动画效果,且这种方式不需要对窗口本身进行自绘,解决了窗口和画布窗口的平滑过渡;并且本发明还创建了半透明画布窗口,将绘制的窗口动画输出创建的半透明画布窗口上进行动画显示,由于半透明画布窗口没有区域局限性,因此不会出现如现有技术中的窗口动画时,超出窗口本身的部分被剪裁掉的缺陷,并且提高了绘制动画的效率。本发明提供的方法,不受操作系统的限制,可以应用于Window XP或者Window 7等操作系统。
相应的,本发明还提供了一种窗口动画实现装置,以下实施例中将详细描述。
参见图5,为本发明提供的一种窗口动画实现装置实施例一的结构示意图。
本实施例一提供的装置,包括:
事件获取模块10,用于截获窗口事件,暂停对目标窗口的操作;
窗口位图获取模块11,用于获取目标窗口的窗口位图;
窗口缓冲区创建模块12,创建用于缓存所述窗口位图的窗口缓冲区;
画布窗口创建模块13,创建半透明画布窗口;
工作缓冲区创建模块14,创建工作缓冲区;
窗口动画绘制模块15,用于在所述工作缓冲区中,根据动画算法将所述窗口缓冲区中的窗口位图绘制成窗口动画;
动画显示模块16,将所述窗口动画绘制模块15绘制的窗口动画输出到所述半透明画布窗口上进行动画显示。
实施本发明提供的窗口动画实现装置,通过获取目标窗口的窗口位图,根据该窗口位图绘制窗口动画,这种方式可以绘制出丰富的窗口动画效果,并且本发明还创建了半透明画布窗口,将绘制的窗口动画输出创建的半透明画布窗口上进行动画显示,由于半透明画布窗口没有区域局限性,因此不会出现如现有技术中的窗口动画时,超出窗口本身的部分被剪裁掉的缺陷。
需要说明的是,本发明获取了目标窗口的窗口位图后,可以根据动画算法将其生成多样的窗口动画特效,例如2D甚至3D窗口动画特效,因此本发明提供的窗口动画效果不受局限,可以实现丰富多样的动画效果。
另外,窗口事件一般分为关闭窗口和显示窗口两种,本发明中,是通过截获系统的窗口WM_SHOWWINDOWN消息来实现截获显示或关闭目标窗口的事件的。
参见图6,为本发明提供的窗口动画实现装置实施例二的结构示意图。
本实施例二将详细描述事件截获模块10的具体功能和结构,包括:
截获单元100,用于截获系统的窗口WM_SHOWWINDOWN消息,截获显示或关闭目标窗口的事件;
事件判断单元101,用于判断所述截获单元截获的事件为显示目标窗口或关闭目标窗口;
操作执行单元102,用于在所述事件判断单元判断事件为显示目标窗口,暂停对目标窗口进行显示的操作;若判断事件为关闭目标窗口,则暂停对目标窗口进行关闭的操作。
具体实现中,若事件判断单元101判断截获单元100截获的事件为显示目标窗口,则操作执行单元102暂停对目标窗口进行显示的操作;若事件判断单元101判断截获单元100截获的事件为关闭目标窗口,则操作执行单元102暂停对目标窗口进行关闭的操作。这里的暂停操作,实际上就是暂时停止执行对目标窗口的显示或关闭操作,而转为进行窗口动画的绘制和创建半透明的画布窗口。
还需要说明的是,针对显示目标窗口和关闭目标窗口,窗口位图获取模块11获取窗口位图的方式有所不同,下面将详细描述。
参见图7,为本发明提供的窗口动画实现装置实施例三的结构示意图。
本实施例三将描述所述窗口位图获取模块的具体功能和结构,其包括:
待显示位图获取单元110,用于在所述事件判断单元101判断事件为显示目标窗口时,根据所述截获单元截获的窗口WM_SHOWWINDOWN消息,从缓存中获取待显示的目标窗口的窗口位图;
已显示位图获取单元111,用于在所述事件判断单元101判断事件为关闭目标窗口时,根据所述截获单元截获的窗口WM_SHOWWINDOWN消息,从显示界面截取已显示的目标窗口的窗口位图。
具体而言,对于显示窗口来讲,此时用户界面上并没有窗口在显示,该窗口是处于即将被显示的状态,它被存放在缓存中,则本发明实施例中采取的技术方案是根据截获单元100截获的WM_SHOWWINDOWN消息,窗口位图获取模块11的待显示位图获取单元110在缓存中取查找该目标窗口的窗口位图,并将其获取出来,存放在创建的窗口缓冲区中。
反之,对于关闭窗口来讲,此时用户的显示界面上已经显示有目标窗口,因此只需要窗口位图获取模块11的已显示位图获取单元111根据所述窗口WM_SHOWWINDOWN消息,从显示界面截取已显示的目标窗口的窗口位图,并将其保存在创建的窗口缓冲区中即可。
参见图8,为本发明提供的窗口动画实现装置实施例四的结构示意图。
本实施例四将描述画布窗口创建模块的具体功能和结构,其包括:
窗口判断单元130,用于判断所述目标窗口是否为半透明窗口;
画布窗口初始化单元131,用于在所述窗口判断单元判断所述目标窗口是半
透明窗口,将该目标窗口作为半透明画布窗口;
画布窗口创建单元132,用于在所述窗口判断单元判断所述目标窗口为非半透明窗口,创建全屏半透明画布窗口。
所述画布窗口创建单元132还用于所述事件判断单元100判断事件为关闭目标窗口时,在创建全屏半透明画布之后,将所述窗口缓冲区中存储的窗口位图提交到所述全屏半透明画布窗口,将所述非半透明窗口不自绘隐藏。
需要说明的是,在半透明画布窗口中进行动画显示,即可克服现有技术中存在的对窗口动画的尺寸造成限制,使得有一些窗口动画被剪裁,无法全部显示的问题,因此本发明实施例中,如果目标窗口本身就是半透明属性的,则直接将其作为半透明画布窗口;无论后续是要将目标窗口以动画的形式进行显示,还是以动画的形式关闭,都不自绘显示画布窗口。
如果目标窗口是非透明窗口,则需要创建一个新的全屏的半透明画布窗口。如果后续要将目标窗口以动画的形式进行显示,则不自绘显示画布窗口。但是后续要将目标窗口以动画的形式进行关闭时,也即当事件为关闭目标窗口时,则在创建全屏半透明画布之后,还需要将所述窗口缓冲区中存储的窗口位图提交到所述全屏半透明画布窗口,并将原来的非半透明目标窗口不自绘隐藏,也即关闭原目标窗口,然后再显示动画关闭效果。这样一来使得用户感觉不到窗口在闪烁。
本发明实施例提供的窗口动画实现装置实现窗口动画的过程如上述方法实施例一至三所示,在此不再赘述。
实施本发明提供的窗口动画实现装置,通过获取目标窗口的窗口位图,根据该窗口位图绘制窗口动画,这种方式可以绘制出丰富的窗口动画效果,且这种方式不需要对窗口本身进行自绘,解决了窗口和画布窗口的平滑过渡;并且本发明还创建了半透明画布窗口,将绘制的窗口动画输出创建的半透明画布窗口上进行动画显示,由于半透明画布窗口没有区域局限性,因此不会出现如现有技术中的窗口动画时,超出窗口本身的部分被剪裁掉的缺陷,并且提高了绘制动画的效率。本发明提供的方法,不受操作系统的限制,可以应用于Window XP或者Window 7等操作系统。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。