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

原文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
时间: 2024-10-28 12:22:02

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

MASM32编程实现窗口渐入渐出效果

因为工作太忙,好久没写程序代码了,不过编写程序的乐趣令我乐此不疲. 天天跟电脑打交道,一忙起来就忘了休息,弄得眼睛都花了~ 为了保护眼睛,偶决定写一个定时强制休息的程序~ 虽然现在这类程序已有不少,不过DIY一下还是不错的~ 先考虑实现倒计时提示窗口,打算让该窗口渐入渐出~ 这里用封装在user32.dll中的API函数AnimateWindow来实现. 函数原型为: BOOLAnimateWindow( HWNDhwnd,//指定产生动画窗口的句柄: DWORDdwTime,//指明动画持续的

MFC渐入渐出框实现方式二

类似360消息弹出框,实现方式一见http://blog.csdn.net/segen_jaa/article/details/7848598. 本文采用另外的API实现渐入渐出效果. 主要API:SetLayeredWindowAttributes. 实现功能: 采用管理器控制消息框每次只显示一个. 消息框独立显示在右下角,不随主窗口放大缩小变化. 鼠标进入消息框区域,渐入渐出效果停止. 1.消息框实现 创建对话框类CMsgTipDlg,设置对话框属性. Tool Window:true.设置

jQuery实现图片渐入渐出切换展示效果_jquery

在这之前我们先看看我们要做的效果是什么样的: 我们要图片在过"一定时间"后自动切换,在右下角处有小方块似数字1,2,3,4,这些数字是根据图片的个数自动出现的,当鼠标经过的时候数字颜色有一定的变化: 下面我们来看看具体怎么实现. 第一步:先写简单的html页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/

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

类似QQ与360软件,消息提示有两种.上下浮动.渐入渐出. 1.上下浮动提示框实现 机制,定时器响应上下浮动消息. 主要API:MoveWindow. 源码如下UpDownTipDlg.h.UpDownTipDlg.cpp. UpDownTipDlg.h [cpp] view plaincopy /*  *@brief 上下浮动提示框  *@date 2012-8-9  */   #pragma once         // CUpDownTipDlg dialog      class CU

仿新浪微博首页&amp;quot;大家正在说&amp;quot;渐入轮显效果_导航菜单

1.吃早餐都中毒了 是不是有点全都,吃早餐竟然食物中毒啊? 2分钟前 2.30城市房价增高进7成 房奴注定当今社会的年青人会很忙碌,一辈子会房子奔波-- 2分钟前 3.李玮峰进球了 李玮峰进球了,这是真的吗? 2分钟前

C#实现关闭其他程序窗口或进程代码分享

  这篇文章主要介绍了C#实现关闭其他程序窗口或进程代码分享,本文给出了两种方法,并分别给出示例代码,需要的朋友可以参考下 在进行winform开发过程中有时候会需要关闭其他程序或者关闭进程,以前写过一篇相关介绍的文章,今天有同事问起来,于是在次翻出来和大家分享一下. 下面介绍我所知的两种方法,应该对大家有帮助,如果有朋友知道其他的方法,谢谢共享一下. 方法1 ProcName 需要关闭的进程名称 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

【WinForm】使用NSIS发布程序

原文:[WinForm]使用NSIS发布程序 简介 NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序.它提供了安装.卸载.系统设置.文件解压缩等功能 使用 以下是我在网上看到的一篇还是比较详细的说明,特别摘出来,改了一下排版,方便查看. 源地址在这  点击查看 ,还是非常感谢高山流水 的! 1. 用向导自动生成NSIS脚本文件. 打开VNISEdit. 单击向导后,在弹出窗口,点<下一步>,出现设置窗口1/8如

Android开发5:应用程序窗口小部件App Widgets的实现(附demo)_Android

前言 本次主要是实现一个Android应用,实现静态广播.动态广播两种改变 widget内容的方法,即在上篇博文中实验的基础上进行修改,所以此次实验的重点是AppWidget小部件的实现啦~ 首先,我们简单说一下Widget是一个啥玩意~ 应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget provider来发布一个Widget.可以容纳其它App Widget的应用程序组件被称为App Widge

Android开发5:应用程序窗口小部件App Widgets的实现(附demo)

前言 本次主要是实现一个Android应用,实现静态广播.动态广播两种改变 widget内容的方法,即在上篇博文中实验的基础上进行修改,所以此次实验的重点是AppWidget小部件的实现啦~ 首先,我们简单说一下Widget是一个啥玩意~ 应用程序窗口小部件(Widget)是微小的应用程序视图,可以被嵌入到其它应用程序中(比如桌面)并接收周期性的更新.你可以通过一个App Widget provider来发布一个Widget.可以容纳其它App Widget的应用程序组件被称为App Widge