From 9998f159d06f7f3f1a97e8ccd7e28f71f1c46b14 Mon Sep 17 00:00:00 2001 From: joostverburg Date: Tue, 19 Nov 2002 15:54:03 +0000 Subject: [PATCH] fixes git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@1789 212acab6-be3b-0410-9dea-997c60f758d6 --- Contrib/AdvSplash/Example.nsi | 28 ++-- Contrib/AdvSplash/advsplash.c | 32 +++-- Contrib/AdvSplash/advsplash.dsp | 228 ++++++++++++++++---------------- Contrib/AdvSplash/advsplash.dsw | 58 ++++---- Contrib/AdvSplash/advsplash.txt | 5 +- Plugins/advsplash.dll | Bin 6144 -> 6144 bytes 6 files changed, 179 insertions(+), 172 deletions(-) diff --git a/Contrib/AdvSplash/Example.nsi b/Contrib/AdvSplash/Example.nsi index 07811157..3337ed17 100644 --- a/Contrib/AdvSplash/Example.nsi +++ b/Contrib/AdvSplash/Example.nsi @@ -5,25 +5,27 @@ OutFile "AdvSplash Test.exe" XPStyle on Function .onInit - # the plugins dir is automatically deleted when the installer exits - InitPluginsDir - File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Makensisw\logo.bmp" - #optional - #File /oname=$PLUGINSDIR\splash.wav "C:\myprog\sound.wav" + # the plugins dir is automatically deleted when the installer exits + InitPluginsDir + File /oname=$PLUGINSDIR\splash.bmp "${NSISDIR}\Contrib\Makensisw\logo.bmp" + #optional + #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, - ; '0' if everything closed normal, and '-1' if some error occured. + 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 "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 Section diff --git a/Contrib/AdvSplash/advsplash.c b/Contrib/AdvSplash/advsplash.c index 45b01424..47539e12 100644 --- a/Contrib/AdvSplash/advsplash.c +++ b/Contrib/AdvSplash/advsplash.c @@ -17,12 +17,15 @@ int resolution = RESOLUTION; int sleep_val, fadein_val, fadeout_val, state, timeleft, keycolor, nt50, alphaparam; 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 BYTE bAlpha, // value for the blend function DWORD dwFlags // action ); + +_tSetLayeredWindowAttributesProc SetLayeredWindowAttributesProc; + static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { if (uMsg == WM_CREATE) @@ -130,9 +133,9 @@ void CALLBACK TimeProc( // FadeIN case 0: if (timeleft == 0) { - timeleft = sleep_val; + timeleft = sleep_val; state++; - if (nt50) call = 255; + if (nt50) call = 255; } else { call = ((fadein_val-timeleft)*255)/fadein_val; break; } // Sleep case 1: if (timeleft == 0) @@ -143,8 +146,8 @@ void CALLBACK TimeProc( // FadeOUT case 2: if (timeleft == 0) { - PostMessage((HWND)dwUser, WM_TIMER, 0, 0); - return; + PostMessage((HWND)dwUser, WM_TIMER, 0, 0); + return; } else { call = ((timeleft)*255)/fadeout_val; break; } } // Transparency value aquired, and could be set... @@ -152,7 +155,7 @@ void CALLBACK TimeProc( SetLayeredWindowAttributesProc((HWND)dwUser, keycolor, call, alphaparam); - call = -1; + call = -1; // Time is running out... timeleft--; } @@ -206,8 +209,6 @@ void __declspec(dllexport) show(HWND hwndParent, int string_size, char *variable HWND myWnd; UINT timerEvent; - PlaySound(fn2,NULL,SND_ASYNC|SND_FILENAME|SND_NODEFAULT); - // Get Bitmap Information 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 HANDLE user32 = GetModuleHandle("user32"); - SetLayeredWindowAttributesProc = GetProcAddress(user32, "SetLayeredWindowAttributes"); + SetLayeredWindowAttributesProc = (_tSetLayeredWindowAttributesProc) GetProcAddress(user32, "SetLayeredWindowAttributes"); // Use win2k method SetLayeredWindowAttributesProc(myWnd, keycolor, (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; // Search for transparent pixels 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) { 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); CombineRgn(region, region, cutrgn, RGN_XOR); DeleteObject(cutrgn); - } + } else bmp++, x++; } else if (bm.bmBitsPixel == 24) { // Bitmap is DWORD aligned by width wdelta = ((bm.bmWidth*3 + 3 ) & 3) ^ 3; // Search for transparent pixels 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) { 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); CombineRgn(region, region, cutrgn, RGN_XOR); DeleteObject(cutrgn); - } + } else bmp += 3, x++; } // Set resulting region. SetWindowRgn(myWnd, region, TRUE); } + PlaySound(fn2,NULL,SND_ASYNC|SND_FILENAME|SND_NODEFAULT); + // Start up timer... state = 0; timeleft = fadein_val; 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); } + + // We should UnRegister class, since Windows NT series never does this by itself + UnregisterClass(wc.lpszClassName, g_hInstance); } } wsprintf(temp,"%d",g_rv); diff --git a/Contrib/AdvSplash/advsplash.dsp b/Contrib/AdvSplash/advsplash.dsp index 33cd4fdc..0af2fe9e 100644 --- a/Contrib/AdvSplash/advsplash.dsp +++ b/Contrib/AdvSplash/advsplash.dsp @@ -1,114 +1,114 @@ -# Microsoft Developer Studio Project File - Name="advsplash" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Application" 0x0101 - -CFG=advsplash - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "advsplash.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "advsplash.mak" CFG="advsplash - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "advsplash - Win32 Release" (based on "Win32 (x86) Application") -!MESSAGE "advsplash - Win32 Debug" (based on "Win32 (x86) Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "advsplash - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# 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 -# SUBTRACT CPP /Ox /Ow /YX -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -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 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 - -!ELSEIF "$(CFG)" == "advsplash - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# 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 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 MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -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 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 - -!ENDIF - -# Begin Target - -# Name "advsplash - Win32 Release" -# Name "advsplash - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=.\advsplash.c -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\ExDLL\exdll.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project +# Microsoft Developer Studio Project File - Name="advsplash" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 6.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=advsplash - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "advsplash.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "advsplash.mak" CFG="advsplash - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "advsplash - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "advsplash - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP AllowPerConfigDependencies 0 +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "advsplash - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# 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 +# SUBTRACT CPP /Ox /Ow /YX +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "NDEBUG" +# ADD RSC /l 0x409 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +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 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 +# SUBTRACT LINK32 /pdb:none + +!ELSEIF "$(CFG)" == "advsplash - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Ignore_Export_Lib 0 +# 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 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 MTL /nologo /D "_DEBUG" /mktyplib203 /win32 +# ADD BASE RSC /l 0x409 /d "_DEBUG" +# ADD RSC /l 0x409 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +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 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 + +!ENDIF + +# Begin Target + +# Name "advsplash - Win32 Release" +# Name "advsplash - Win32 Debug" +# Begin Group "Source Files" + +# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" +# Begin Source File + +SOURCE=.\advsplash.c +# End Source File +# End Group +# Begin Group "Header Files" + +# PROP Default_Filter "h;hpp;hxx;hm;inl" +# Begin Source File + +SOURCE=..\ExDLL\exdll.h +# End Source File +# End Group +# Begin Group "Resource Files" + +# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" +# End Group +# End Target +# End Project diff --git a/Contrib/AdvSplash/advsplash.dsw b/Contrib/AdvSplash/advsplash.dsw index 6bbdc7ed..0f37b6a9 100644 --- a/Contrib/AdvSplash/advsplash.dsw +++ b/Contrib/AdvSplash/advsplash.dsw @@ -1,29 +1,29 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "advsplash"=.\advsplash.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - +Microsoft Developer Studio Workspace File, Format Version 6.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "advsplash"=.\advsplash.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/Contrib/AdvSplash/advsplash.txt b/Contrib/AdvSplash/advsplash.txt index 6e45532d..ef0094c3 100644 --- a/Contrib/AdvSplash/advsplash.txt +++ b/Contrib/AdvSplash/advsplash.txt @@ -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) and transparency (24bit/8bit bitmaps). @@ -54,5 +54,4 @@ screen early (pop it from the stack) -Justin Converted to a plugin DLL by Amir Szekely (kichik) -Fading and transparency by Nik Medved (brainsucker) - +Fading and transparency by Nik Medved (brainsucker) \ No newline at end of file diff --git a/Plugins/advsplash.dll b/Plugins/advsplash.dll index efad34c67336411e73f16fab8d1900ad538fa5f5..bdaffb92461e67630ebed9395e9c336fbb3f426f 100644 GIT binary patch literal 6144 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 EF9e$zSpWb4 literal 6144 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