git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1789 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
joostverburg 2002-11-19 15:54:03 +00:00
parent d8901de5fa
commit 9998f159d0
6 changed files with 179 additions and 172 deletions

View file

@ -5,25 +5,27 @@ OutFile "AdvSplash Test.exe"
XPStyle on XPStyle on
Function .onInit Function .onInit
# the plugins dir is automatically deleted when the installer exits # the plugins dir is automatically deleted when the installer exits
InitPluginsDir InitPluginsDir
File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Makensisw\logo.bmp" File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Makensisw\logo.bmp"
#optional #optional
#File /oname=$PLUGINSDIR\splash.wav "C:\myprog\sound.wav" #File /oname=$PLUGINSDIR\splash.wav "C:\myprog\sound.wav"
advsplash::show 1000 600 400 -1 $PLUGINSDIR\splash advsplash::show 1000 600 400 -1 $PLUGINSDIR\splash
Pop $0 ; $0 has '1' if the user closed the splash screen early, Pop $0 ; $0 has '1' if the user closed the splash screen early,
; '0' if everything closed normal, and '-1' if some error occured. ; '0' if everything closed normal, and '-1' if some error occured.
MessageBox MB_OK "Now with transparency" MessageBox MB_OK "Now with transparency"
File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Icons\modern.bmp" File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Icons\modern.bmp"
advsplash::show 1000 600 400 0xFF00FF $PLUGINSDIR\splash advsplash::show 1000 600 400 0xFF00FF $PLUGINSDIR\splash
Pop $0 ; $0 has '1' if the user closed the splash screen early,
; '0' if everything closed normal, and '-1' if some error occured.
MessageBox MB_OK "$0"
Pop $0 ; $0 has '1' if the user closed the splash screen early,
; '0' if everything closed normal, and '-1' if some error occured.
FunctionEnd FunctionEnd
Section Section

View file

@ -17,12 +17,15 @@ int resolution = RESOLUTION;
int sleep_val, fadein_val, fadeout_val, state, timeleft, keycolor, nt50, alphaparam; int sleep_val, fadein_val, fadeout_val, state, timeleft, keycolor, nt50, alphaparam;
int call = -1; int call = -1;
BOOL (_stdcall *SetLayeredWindowAttributesProc)(HWND hwnd, // handle to the layered window typedef BOOL (_stdcall *_tSetLayeredWindowAttributesProc)(HWND hwnd, // handle to the layered window
COLORREF crKey, // specifies the color key COLORREF crKey, // specifies the color key
BYTE bAlpha, // value for the blend function BYTE bAlpha, // value for the blend function
DWORD dwFlags // action DWORD dwFlags // action
); );
_tSetLayeredWindowAttributesProc SetLayeredWindowAttributesProc;
static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ {
if (uMsg == WM_CREATE) if (uMsg == WM_CREATE)
@ -130,9 +133,9 @@ void CALLBACK TimeProc(
// FadeIN // FadeIN
case 0: if (timeleft == 0) case 0: if (timeleft == 0)
{ {
timeleft = sleep_val; timeleft = sleep_val;
state++; state++;
if (nt50) call = 255; if (nt50) call = 255;
} else { call = ((fadein_val-timeleft)*255)/fadein_val; break; } } else { call = ((fadein_val-timeleft)*255)/fadein_val; break; }
// Sleep // Sleep
case 1: if (timeleft == 0) case 1: if (timeleft == 0)
@ -143,8 +146,8 @@ void CALLBACK TimeProc(
// FadeOUT // FadeOUT
case 2: if (timeleft == 0) case 2: if (timeleft == 0)
{ {
PostMessage((HWND)dwUser, WM_TIMER, 0, 0); PostMessage((HWND)dwUser, WM_TIMER, 0, 0);
return; return;
} else { call = ((timeleft)*255)/fadeout_val; break; } } else { call = ((timeleft)*255)/fadeout_val; break; }
} }
// Transparency value aquired, and could be set... // Transparency value aquired, and could be set...
@ -152,7 +155,7 @@ void CALLBACK TimeProc(
SetLayeredWindowAttributesProc((HWND)dwUser, keycolor, SetLayeredWindowAttributesProc((HWND)dwUser, keycolor,
call, call,
alphaparam); alphaparam);
call = -1; call = -1;
// Time is running out... // Time is running out...
timeleft--; timeleft--;
} }
@ -206,8 +209,6 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable
HWND myWnd; HWND myWnd;
UINT timerEvent; UINT timerEvent;
PlaySound(fn2,NULL,SND_ASYNC|SND_FILENAME|SND_NODEFAULT);
// Get Bitmap Information // Get Bitmap Information
GetObject(g_hbm, sizeof(bm), (LPSTR)&bm); GetObject(g_hbm, sizeof(bm), (LPSTR)&bm);
@ -219,7 +220,7 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable
{ {
// Get blending proc address // Get blending proc address
HANDLE user32 = GetModuleHandle("user32"); HANDLE user32 = GetModuleHandle("user32");
SetLayeredWindowAttributesProc = GetProcAddress(user32, "SetLayeredWindowAttributes"); SetLayeredWindowAttributesProc = (_tSetLayeredWindowAttributesProc) GetProcAddress(user32, "SetLayeredWindowAttributes");
// Use win2k method // Use win2k method
SetLayeredWindowAttributesProc(myWnd, keycolor, SetLayeredWindowAttributesProc(myWnd, keycolor,
(fadein_val > 0)?(0):(255), (fadein_val > 0)?(0):(255),
@ -268,7 +269,7 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable
wdelta = ((bm.bmWidth + 3) & 3) ^ 3; wdelta = ((bm.bmWidth + 3) & 3) ^ 3;
// Search for transparent pixels // Search for transparent pixels
for (y = bm.bmHeight-1; y >= 0; y--, bmp += wdelta) for (y = bm.bmHeight-1; y >= 0; y--, bmp += wdelta)
for (x = 0; x < bm.bmWidth; x++, bmp++) for (x = 0; x < bm.bmWidth; )
if (*bmp == (BYTE) keycolor) if (*bmp == (BYTE) keycolor)
{ {
int j = x; int j = x;
@ -278,14 +279,14 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable
cutrgn = CreateRectRgn(j, y, x, y+1); cutrgn = CreateRectRgn(j, y, x, y+1);
CombineRgn(region, region, cutrgn, RGN_XOR); CombineRgn(region, region, cutrgn, RGN_XOR);
DeleteObject(cutrgn); DeleteObject(cutrgn);
} } else bmp++, x++;
} else if (bm.bmBitsPixel == 24) } else if (bm.bmBitsPixel == 24)
{ {
// Bitmap is DWORD aligned by width // Bitmap is DWORD aligned by width
wdelta = ((bm.bmWidth*3 + 3 ) & 3) ^ 3; wdelta = ((bm.bmWidth*3 + 3 ) & 3) ^ 3;
// Search for transparent pixels // Search for transparent pixels
for (y = bm.bmHeight-1; y >= 0; y--, bmp += wdelta) for (y = bm.bmHeight-1; y >= 0; y--, bmp += wdelta)
for (x = 0; x < bm.bmWidth; bmp += 3, x++) for (x = 0; x < bm.bmWidth; )
if ((*(int*)bmp & 0xFFFFFF) == keycolor) if ((*(int*)bmp & 0xFFFFFF) == keycolor)
{ {
int j = x; int j = x;
@ -295,13 +296,15 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable
cutrgn = CreateRectRgn(j, y, x, y+1); cutrgn = CreateRectRgn(j, y, x, y+1);
CombineRgn(region, region, cutrgn, RGN_XOR); CombineRgn(region, region, cutrgn, RGN_XOR);
DeleteObject(cutrgn); DeleteObject(cutrgn);
} } else bmp += 3, x++;
} }
// Set resulting region. // Set resulting region.
SetWindowRgn(myWnd, region, TRUE); SetWindowRgn(myWnd, region, TRUE);
} }
PlaySound(fn2,NULL,SND_ASYNC|SND_FILENAME|SND_NODEFAULT);
// Start up timer... // Start up timer...
state = 0; timeleft = fadein_val; state = 0; timeleft = fadein_val;
timerEvent = timeSetEvent(resolution, RESOLUTION/4, TimeProc, (DWORD_PTR)myWnd, TIME_PERIODIC); timerEvent = timeSetEvent(resolution, RESOLUTION/4, TimeProc, (DWORD_PTR)myWnd, TIME_PERIODIC);
@ -319,6 +322,9 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable
DeleteObject(g_hbm); DeleteObject(g_hbm);
} }
// We should UnRegister class, since Windows NT series never does this by itself
UnregisterClass(wc.lpszClassName, g_hInstance);
} }
} }
wsprintf(temp,"%d",g_rv); wsprintf(temp,"%d",g_rv);

View file

@ -1,114 +1,114 @@
# Microsoft Developer Studio Project File - Name="advsplash" - Package Owner=<4> # Microsoft Developer Studio Project File - Name="advsplash" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00 # Microsoft Developer Studio Generated Build File, Format Version 6.00
# ** DO NOT EDIT ** # ** DO NOT EDIT **
# TARGTYPE "Win32 (x86) Application" 0x0101 # TARGTYPE "Win32 (x86) Application" 0x0101
CFG=advsplash - Win32 Debug CFG=advsplash - Win32 Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run !MESSAGE use the Export Makefile command and run
!MESSAGE !MESSAGE
!MESSAGE NMAKE /f "advsplash.mak". !MESSAGE NMAKE /f "advsplash.mak".
!MESSAGE !MESSAGE
!MESSAGE You can specify a configuration when running NMAKE !MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE !MESSAGE
!MESSAGE NMAKE /f "advsplash.mak" CFG="advsplash - Win32 Debug" !MESSAGE NMAKE /f "advsplash.mak" CFG="advsplash - Win32 Debug"
!MESSAGE !MESSAGE
!MESSAGE Possible choices for configuration are: !MESSAGE Possible choices for configuration are:
!MESSAGE !MESSAGE
!MESSAGE "advsplash - Win32 Release" (based on "Win32 (x86) Application") !MESSAGE "advsplash - Win32 Release" (based on "Win32 (x86) Application")
!MESSAGE "advsplash - Win32 Debug" (based on "Win32 (x86) Application") !MESSAGE "advsplash - Win32 Debug" (based on "Win32 (x86) Application")
!MESSAGE !MESSAGE
# Begin Project # Begin Project
# PROP AllowPerConfigDependencies 0 # PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName "" # PROP Scc_ProjName ""
# PROP Scc_LocalPath "" # PROP Scc_LocalPath ""
CPP=cl.exe CPP=cl.exe
MTL=midl.exe MTL=midl.exe
RSC=rc.exe RSC=rc.exe
!IF "$(CFG)" == "advsplash - Win32 Release" !IF "$(CFG)" == "advsplash - Win32 Release"
# PROP BASE Use_MFC 0 # PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0 # PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release" # PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release" # PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 0 # PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release" # PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release" # PROP Intermediate_Dir "Release"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /Og /Os /Oy /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FD /c # ADD CPP /nologo /W3 /GX /Og /Os /Oy /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /FD /c
# SUBTRACT CPP /Ox /Ow /YX # SUBTRACT CPP /Ox /Ow /YX
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD BASE RSC /l 0x409 /d "NDEBUG"
# ADD RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG"
BSC32=bscmake.exe BSC32=bscmake.exe
# ADD BASE BSC32 /nologo # ADD BASE BSC32 /nologo
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /subsystem:windows /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winmm.lib /nologo /entry:"_DllMainCRTStartup" /subsystem:windows /dll /machine:I386 /nodefaultlib /out:"../../Plugins/advsplash.dll" /opt:nowin98 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winmm.lib /nologo /entry:"_DllMainCRTStartup" /subsystem:windows /dll /machine:I386 /nodefaultlib /out:"../../Plugins/advsplash.dll" /opt:nowin98
# SUBTRACT LINK32 /pdb:none # SUBTRACT LINK32 /pdb:none
!ELSEIF "$(CFG)" == "advsplash - Win32 Debug" !ELSEIF "$(CFG)" == "advsplash - Win32 Debug"
# PROP BASE Use_MFC 0 # PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1 # PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug" # PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug" # PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir "" # PROP BASE Target_Dir ""
# PROP Use_MFC 0 # PROP Use_MFC 0
# PROP Use_Debug_Libraries 1 # PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug" # PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug" # PROP Intermediate_Dir "Debug"
# PROP Ignore_Export_Lib 0 # PROP Ignore_Export_Lib 0
# PROP Target_Dir "" # PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /YX /FD /GZ /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD BASE RSC /l 0x409 /d "_DEBUG"
# ADD RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG"
BSC32=bscmake.exe BSC32=bscmake.exe
# ADD BASE BSC32 /nologo # ADD BASE BSC32 /nologo
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /dll /debug /machine:I386 /pdbtype:sept
# SUBTRACT LINK32 /pdb:none # SUBTRACT LINK32 /pdb:none
!ENDIF !ENDIF
# Begin Target # Begin Target
# Name "advsplash - Win32 Release" # Name "advsplash - Win32 Release"
# Name "advsplash - Win32 Debug" # Name "advsplash - Win32 Debug"
# Begin Group "Source Files" # Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File # Begin Source File
SOURCE=.\advsplash.c SOURCE=.\advsplash.c
# End Source File # End Source File
# End Group # End Group
# Begin Group "Header Files" # Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl" # PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File # Begin Source File
SOURCE=..\ExDLL\exdll.h SOURCE=..\ExDLL\exdll.h
# End Source File # End Source File
# End Group # End Group
# Begin Group "Resource Files" # Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group # End Group
# End Target # End Target
# End Project # End Project

View file

@ -1,29 +1,29 @@
Microsoft Developer Studio Workspace File, Format Version 6.00 Microsoft Developer Studio Workspace File, Format Version 6.00
# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
############################################################################### ###############################################################################
Project: "advsplash"=.\advsplash.dsp - Package Owner=<4> Project: "advsplash"=.\advsplash.dsp - Package Owner=<4>
Package=<5> Package=<5>
{{{ {{{
}}} }}}
Package=<4> Package=<4>
{{{ {{{
}}} }}}
############################################################################### ###############################################################################
Global: Global:
Package=<5> Package=<5>
{{{ {{{
}}} }}}
Package=<3> Package=<3>
{{{ {{{
}}} }}}
############################################################################### ###############################################################################

View file

@ -1,4 +1,4 @@
AdvSplash.exe - small (5.5k), simple plugin that lets you throw AdvSplash.exe - small (6.0k), simple plugin that lets you throw
up a splash screen in NSIS installers with cool fading effects (win2k/xp) up a splash screen in NSIS installers with cool fading effects (win2k/xp)
and transparency (24bit/8bit bitmaps). and transparency (24bit/8bit bitmaps).
@ -54,5 +54,4 @@ screen early (pop it from the stack)
-Justin -Justin
Converted to a plugin DLL by Amir Szekely (kichik) Converted to a plugin DLL by Amir Szekely (kichik)
Fading and transparency by Nik Medved (brainsucker) Fading and transparency by Nik Medved (brainsucker)

Binary file not shown.