animate是NSIS动画渐入式打开界面渐入式关闭界面

/*
可能参考API函数:AnimateWindow的相关信息
/NOUNLOAD: 不卸载动态库
对于大部份人来说,可能都只会按插件提供的例子去做,能编译得过能正常运行就算了,但你想过没有,为什么有些插件需要/NOUNLOAD才能正常运行,而有些插件却从来不用也能正常运行?
首先,/NOUNLOAD是NSIS遗留下来的历史问题,是为了兼容旧版本的插件而保留下来的,在NSIS2.42之前,如果想插件在调用之后不被FreeLibrary,必须使用/NOUNLOAD参数 或SetPluginUnload alwaysoff,但这有个不便之处是必须以后不加/NOUNLOAD参数再调用一次该插件,否则会造成安装程序在退出时无法删除该dll。
从NSIS2.42开始,只要新编写的插件调用它新提供的接口,就可以自动在安装程序退出时才被FreeLibrary,因此调用插件命令时无需使用/NOUNLOAD参数。
其次,对于旧版本的插件不用 /NOUNLOAD参数也能正常运行的原因在于它被FreeLibrary后没有造成任何影响,但对于一个界面类的插件,肯定要保持插件不被FreeLibrary的,因为它需要将窗口的回调函数修改成自己内部的函数,如果它被FreeLibrary了,后果可想而知。
/ATIME: 时间,单位是毫秒1000ms=1s
/FLAGS:显示效果类型
AW_SLIDE:使用滑动类型。缺省则为滚动动画类型。当使用AW_CENTER标志时,这个标志就被忽略。
AW_ACTIVATE:激活窗口。在使用了AW_HIDE标志后不要使用这个标志。
AW_BLEND:使用淡出效果。只有当hWnd为顶层窗口的时候才可以使用此标志。
AW_HIDE:隐藏窗口,缺省则显示窗口。
AW_CENTER:若使用了AW_HIDE标志,则使窗口向内重叠;若未使用AW_HIDE标志,则使窗口向外扩展。
AW_HOR_POSITIVE:自左向右显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
AW_VER_POSITIVE:自顶向下显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
AW_VER_NEGATIVE:自下向上显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
AW_HOR_NEGATIVE:自右向左显示窗口。该标志可以在滚动动画和滑动动画中使用。当使用AW_CENTER标志时,该标志将被忽略。
/X:窗口显示位置X轴,相对于桌面
/Y:窗口显示位置Y轴,相对于桌面
/SFG:在动画退出后,将父窗口带到最前(激活状态)
/NOCANCEL:点击鼠标左键也不退出
/BORDER:创建带边框的界面
/COLOR:为GIF图片创建透明底色
/IFNC:清除之前的NOCANCEL标记,将ATIME清空为0这样动画不需再等待
*/
!AddPluginDir "../Plugins"
OutFile "Animate.exe"
Icon "ico.ico"
!define IMG_NAME "1.jpg"
!ifndef AW_HOR_POSITIVE
!define AW_HOR_POSITIVE 0x00000001
!define AW_HOR_NEGATIVE 0x00000002
!define AW_VER_POSITIVE 0x00000004
!define AW_VER_NEGATIVE 0x00000008
!define AW_CENTER 0x00000010
!define AW_HIDE 0x00010000
!define AW_ACTIVATE 0x00020000
!define AW_SLIDE 0x00040000
!define AW_BLEND 0x00080000
!endif
Function .onInit
 IntOp $R0 ${AW_VER_POSITIVE} | ${AW_HOR_POSITIVE}
 IntOp $R0 $R0 | ${AW_SLIDE}
 #animate::show /NOUNLOAD /ATIME=3000 /FLAGS=$R0 /X=0 /Y=0 /SFG /NOCANCEL "$EXEDIR${IMG_NAME}"
 animate::show /NOUNLOAD /ATIME=1000 /FLAGS=${AW_CENTER} "$EXEDIR${IMG_NAME}"
 Pop $0 ; show, error
FunctionEnd
Function .onGUIInit
 animate::hwnd /NOUNLOAD
 Pop $1
 ShowWindow $1 0
FunctionEnd
Function .onGUIEnd
 animate::hwnd /NOUNLOAD
 Pop $1
 ShowWindow $1 1
 IntOp $R0 ${AW_VER_POSITIVE} | ${AW_HOR_POSITIVE}
 IntOp $R0 $R0 | ${AW_SLIDE}
 #animate::wait /ATIME=1000 /FLAGS=$R0 /SFG /IFNC 1000
 animate::wait /ATIME=1000 /FLAGS=${AW_CENTER} /SFG /IFNC 0
 Pop $1 ; reason to exit - "click", "wait", "error", "terminate"
FunctionEnd
Section ""
SectionEnd
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容