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

@ -24,6 +24,8 @@ Function .onInit
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"
FunctionEnd
Section

View file

@ -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)
@ -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);

View file

@ -53,7 +53,7 @@ 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 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

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)
and transparency (24bit/8bit bitmaps).
@ -55,4 +55,3 @@ screen early (pop it from the stack)
-Justin
Converted to a plugin DLL by Amir Szekely (kichik)
Fading and transparency by Nik Medved (brainsucker)

Binary file not shown.