原文NSIS:实现程序窗口逐渐透明的渐入渐出效果

需要修改版的插件(支持timer功能):

MUI:InstallOptions.dll
MUI2:nsDialogs.dll
以及system插件,(受api限制)只能运行于2k或者更高的平台之上。
 
轻狂说明:
请在相应目录下建立transparent.ini文件。

001 /*
002 <a href="http://www.flighty.cn" target="_blank">www.flighty.cn</a>
003 */
004 !AddPluginDir .\
005 ;--------------------------------
006 !define MUI2  ;定义UI版本(MUI,MUI2)
007 !define iTransparentPercent 90   ;定义透明度
008 Var DIALOG
009 var iTransparent
010 var bTransparent
011 Name "Transparent Example"
012 SetCompressor /SOLID lzma
013 InstallDir $ExeDir
014 OutFile transparent_nsis.exe
015 !ifdef MUI2
016 !include MUI2.nsh
017 Var TIMERID
018 !else
019 !include MUI.nsh
020 ;定义INI文件
021 !define INI $PLUGINSDIR\transparent.ini
022 !endif
023 !include LogicLib.nsh
024 !ifndef GWL_EXSTYLE
025 !define GWL_EXSTYLE -20
026 !endif
027 !ifndef WS_EX_LAYERED
028 !define WS_EX_LAYERED 0x80000
029 !endif
030 !ifndef LWA_ALPHA
031 !define LWA_ALPHA 2
032 !endif
033 !define MUI_CUSTOMFUNCTION_ABORT UserAbort
034 !ifdef MUI2
035 Page custom nsDialogsPage
036 !else
037 page custom InstallOptionsPage
038 !endif
039 !define MUI_PAGE_CUSTOMFUNCTION_SHOW welcome_PageShow
040 ; 欢迎页面
041 !insertmacro MUI_PAGE_WELCOME
042 !insertmacro MUI_PAGE_DIRECTORY
043  !insertmacro MUI_PAGE_INSTFILES
044  !insertmacro MUI_PAGE_FINISH
045 ;--------------------------------
046  !insertmacro MUI_LANGUAGE "SimpChinese"
047 Section -Nil
048 SectionEnd
049 Function welcome_PageShow
050 !ifdef MUI2
051   Pop $0
052    nsDialogs::KillTimer /NOUNLOAD $TIMERID
053 !endif
054   GetDlgItem $0 $hwndparent 3
055   ShowWindow $0 0
056   ${if} $bTransparent == 0
057     ${For} $R0 0 $iTransparent
058       system::call 'user32::SetLayeredWindowAttributes(i $HWNDPARENT, i 0, i R0, i ${LWA_ALPHA}) .iR1'
059       sleep 1
060     ${Next}
061   ${endif}
062   StrCpy $bTransparent 1
063 FunctionEnd
064 Function Exit
065   ${ForEach} $R0 $iTransparent 0 - 1
066     system::call 'user32::SetLayeredWindowAttributes(i $HWNDPARENT, i 0, i R0, i ${LWA_ALPHA}) .iR1'
067     sleep 1
068   ${Next}
069 FunctionEnd
070 Function UserAbort
071   Messagebox MB_YESNO|MB_ICONQUESTION "Are Sure you want to cancel?" IDYES +2
072   Abort
073   call Exit
074 FunctionEnd
075 Function .onInstSuccess
076   Messagebox MB_OK|MB_ICONINFORMATION "Install Success!"
077   call Exit
078 FunctionEnd
079 Function SetWindowAttrib
080   ${if} $bTransparent == 0
081     system::call 'user32::GetWindowLong(i $HWNDPARENT, i ${GWL_EXSTYLE}) .iR0'
082     ;messagebox mb_ok $R0
083     IntOp $R0 $R0 + ${WS_EX_LAYERED}
084     system::call 'user32::SetWindowLong(i $HWNDPARENT, i ${GWL_EXSTYLE}, i R0) .iR1'
085     system::call 'user32::SetLayeredWindowAttributes(i $HWNDPARENT, i 0, i 0, i ${LWA_ALPHA}) .iR2'
086   Pop $R2
087   Pop $R1
088   Pop $R0
089   ${endif}
090 FunctionEnd
091 !ifndef MUI2
092 Function InstallOptionsPage
093   Call SetWindowAttrib
094   InstallOptions::initDialog /NOUNLOAD ${INI}
095     Pop $DIALOG
096 ;如果你想做的更逼真一些,请把它仿成欢迎页面(你的初始页面)一样的
097   InstallOptions::Show
098 FunctionEnd
099 !endif
100 !ifdef MUI2
101 Function OnTimer
102   Pop $0 ;Free Timer id
103   GetDlgItem $1 $HWNDPARENT 1
104   SendMessage $1 ${BM_CLICK} 0  1
105 FunctionEnd
106 Function nsDialogsPage
107   Call SetWindowAttrib
108   nsDialogs::Create /NOUNLOAD 1018
109   Pop $DIALOG
110 ;如果你想做的更逼真一些,请把它仿成欢迎页面(你的初始页面)一样的
111   GetFunctionAddress $0 OnTimer
112   nsDialogs::CreateTimer /NOUNLOAD $0 10
113   Pop $TIMERID
114   nsDialogs::Show
115 FunctionEnd
116 !endif
117 Function .OnInit
118   InitPluginsDir
119 !ifndef MUI2
120   File /oname=${INI} "transparent.ini"
121 !endif
122   IntOp $iTransparent ${iTransparentPercent} * 255
123   IntOp $iTransparent $iTransparent / 100
124   StrCpy $bTransparent 0
125 FunctionEnd

NSIS:实现程序窗口逐渐透明的渐入渐出效果的更多相关文章

  1. MFC渐入渐出框实现方式二

    类似360消息弹出框,实现方式一见http://blog.csdn.net/segen_jaa/article/details/7848598. 本文采用另外的API实现渐入渐出效果. 主要API:S ...

  2. MFC上下浮动与渐入渐出消息提示框实现

    类似QQ与360软件,消息提示有两种.上下浮动.渐入渐出. 1.上下浮动提示框实现 机制,定时器响应上下浮动消息. 主要API:MoveWindow. 源码如下UpDownTipDlg.h.UpDow ...

  3. [Unity3D]Unity3D游戏开发之Logo渐入渐出效果的实现

    ---------------------------------------------------------------------------------------------------- ...

  4. js原生实现div渐入渐出

    jq对渐入渐出进行封装,简单的使用连个方法就可以实现.fadeIn(),fadeOut();如果我们界面没有使用jq那么原生怎么实现呢? 我们讲解一下,这个原理.当我们要实现渐入的时候,首先是让隐藏的 ...

  5. 解决Jquery mobile点击较长文本body的时候Header和footer会渐入渐出的问题

         在做一个Phonegap+Jqm工程的时候,出现了如题的问题,相信很多人都遇到过Jquerymobile点击body时候header和footer会闪烁的显示和隐藏问题,fixed却并不能真 ...

  6. 在FL Studio中如何做出渐入的人声效果

    当我们在拿到一段人声并想把它加入歌曲中时,如果我们发现人声没有渐入的效果,直接加入到歌曲里出现会变得很突兀的话,我们就需要用到这篇文章所介绍的方法,给人声加上一个渐入的效果. 1. 找到我们需要处理的 ...

  7. 小程序 wepy wx.createAnimation 向右滑动渐入渐出

    <style lang="less"> .animation { width: 100vw; height: 100vh; opacity: 0; background ...

  8. 转 android 从底部弹出一个popuwindow,渐入渐出效果。我这里是用在购物车需要选择购买选项的操作。

    最近要改客户端,需要实现一个从底部弹出的popuwindow,像我这种渣渣android技术,能整出popuwindow但是整不出动画,百度之,记录一下. 从下面这个地址转的 http://blog. ...

  9. 以“图片渐入渐出”为例讲述jQuery插件的具体实现

    首先声明,此代码以网友“斯迈欧”原创作为此例的讲解: 在这之前我们先看看我们要做的效果是什么样的: 解析下面的样式:我们要图片在过“一定时间”后自动切换,在右下角处有小方块似数字1,2,3,4,这些数 ...

随机推荐

  1. 【原创】poj ----- 2376 Cleaning Shifts 解题报告

    题目地址: http://poj.org/problem?id=2376 题目内容: Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K ...

  2. Android_declare-styleable_自己定义控件的属性

    1.简单实例 (1).在res/values文件下定义一个attrs.xml文件 <? xml version="1.0" encoding="utf-8" ...

  3. ROM签名脚本[原创]

    下面的代码是bash脚本来的.需要保存为*.sh后序. # !/bin/bash #usage: signapk.sh [-hs] [zipfile-unsigned | update.zip] #A ...

  4. POJ 2485 Highways (prim最小生成树)

    对于终于生成的最小生成树中最长边所连接的两点来说 不存在更短的边使得该两点以不论什么方式联通 对于本题来说 最小生成树中的最长边的边长就是使整个图联通的最长边的边长 由此可知仅仅要对给出城市所抽象出的 ...

  5. 【设计模式】Template Method模式

    OO基金会 封装 多态 继承 OO原则 封装变化 多用组合,少用继承 针对接口编程.不针对实现编程 为交互对象的松耦合设计而努力 类应该对扩展开放,对改动关闭 依赖抽象,不要依赖详细类 仅仅和朋友交谈 ...

  6. C和指针 (pointers on C)——第十四章:预处理器

    第十四章 预处理器 我跳过了先进的指针主题的章节. 太多的技巧,太学科不适合今天的我.但我真的读,读懂.假设谁读了私下能够交流一下.有的小技巧还是非常有意思. 预处理器这一章的内容.大家肯定都用过.什 ...

  7. java反编译

    反编译工具下载地址 http://download.csdn.net/detail/u011110110/8621653 反编译方法: 第一步:你先把下载的包的后缀名改成.zip第二步:到网上搜索de ...

  8. StringUtils.isNumeric(String str) 的一个坑(转)

    在项目中遇到一处bug,调试的结果竟然是StringUtils.isNumeric(String str) 在捣鬼(采用的是org.apache.commons.lang.StringUtils),下 ...

  9. web.xmlf多ilter在执行顺序

    1.随着url-pattern路配置filter请务必先实施servlet-name路配置filter    2.随着url-partern路配置filter于.,按web.xml于filter-ma ...

  10. datagrid直接编辑保存“设计缺陷”

    当今使用easyUI的datagrid组件的时候,碰到了一些问题,记录下来以便下次高速解决. 需求是在一张表单里会关联有一个列表,能够增删查改 曾经没用easyUI的时候,这个增和改的页面我通常是用一 ...