原文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. HDU 3177 Crixalis&#39;s Equipment(贪婪)

    主题链接:http://acm.hdu.edu.cn/showproblem.php? pid=3177 Problem Description Crixalis - Sand King used t ...

  2. hdu1520 (树形dp)

    hdu1520 http://acm.hdu.edu.cn/showproblem.php?pid=1520 题意是给定一棵树,每个结点有一个价值,要我们选择任意个结点使得总价值最大,规则是如果父亲结 ...

  3. php学习笔记--error

    不同的错误处理方法: 简单的die()语句 自己定义错误函数和错误触发器 错误报告 主要的错误处理:使用die()函数 if(!file_exists("welcome.txt") ...

  4. NET MVC异常处理模块

    一个简单的ASP.NET MVC异常处理模块   一.前言 异常处理是每个系统必不可少的一个重要部分,它可以让我们的程序在发生错误时友好地提示.记录错误信息,更重要的是不破坏正常的数据和影响系统运行. ...

  5. REDGATE又一好用的脚本工具ScriptsManager1.3

    原文:REDGATE又一好用的脚本工具ScriptsManager1.3 REDGATE又一好用的脚本工具ScriptsManager1.3 先说明一下:这个工具是免费的 下载地址:http://ww ...

  6. [Sqlite]--&gt;Java采用jdbc联系Sqlite各种特定的工艺数据库的数据操作

    引:     1, Sqlite在Windows.Linux 和 Mac OS X 上的安装过程     2.嵌入式数据库的安装.建库.建表.更新表结构以及数据导入导出等等具体过程记录     3,嵌 ...

  7. 怎样设制 select 不可编辑 仅仅读

    1. <select style="width:195px" name="role"  id="role" onfocus=" ...

  8. Oracle性能优化顺序表名称来选择最有效的学习笔记

    选择最有效的顺序表名(只有有效的基于规则的优化)  ORACLE分析器按照订单处理从右到左FROM在FROM子句中的表名,故FROM写在最后的表(基础表 driving table)将被最先处理. 在 ...

  9. 3、采用Gradle创Libgdx工程

    (原文链接:http://www.libgdx.cn/topic/20/3-%E4%BD%BF%E7%94%A8gradle%E5%88%9B%E5%BB%BAlibgdx%E9%A1%B9%E7%9 ...

  10. android关键知识

    1.handler 与Looper 与MessageQueue .Message关系 handler:是处理主线程(ui线程)处理耗时操作的线程,通过post message到MessageQueue ...