File: Transparency.c

package info (click to toggle)
scilab 4.0-12
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 100,640 kB
  • ctags: 57,333
  • sloc: ansic: 377,889; fortran: 242,862; xml: 179,819; tcl: 42,062; sh: 10,593; ml: 9,441; makefile: 4,377; cpp: 1,354; java: 621; csh: 260; yacc: 247; perl: 130; lex: 126; asm: 72; lisp: 30
file content (167 lines) | stat: -rw-r--r-- 4,703 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
/*-----------------------------------------------------------------------------------*/
/* INRIA 2005 */
/* Allan CORNET */
/*-----------------------------------------------------------------------------------*/
#include "Transparency.h"
/*-----------------------------------------------------------------------------------*/
#ifndef WS_EX_LAYERED
  #define WS_EX_LAYERED           0x00080000
#endif

#ifndef LWA_COLORKEY
#define LWA_COLORKEY            0x00000001
#endif

#ifndef LWA_ALPHA
#define LWA_ALPHA               0x00000002
#endif
/*-----------------------------------------------------------------------------------*/
typedef BOOL (WINAPI *SLWA_FUNC)(HWND hwnd,COLORREF crKey,BYTE bAlpha,DWORD dwFlags);
SLWA_FUNC SetLayeredWindowAttributes;
/*-----------------------------------------------------------------------------------*/
static BOOL LoadUser32DLL=FALSE;
static int CurrentAlphaLevel=255;
static BOOL TransparencyON=FALSE;
static HMODULE hUser32=NULL;
/*-----------------------------------------------------------------------------------*/
extern LPTW GetTextWinScilab(void);
/*-----------------------------------------------------------------------------------*/
BOOL IsEnableTransparencyMode(void)
{
	return TransparencyON;
}
/*-----------------------------------------------------------------------------------*/
BOOL ActivateTransparencyMode(HWND hWnd)
{
	BOOL bOK=FALSE;
	int OS=GetOSVersion();

	if ( (OS!=OS_WIN32_WINDOWS_NT_3_51) &&
		(OS!=OS_WIN32_WINDOWS_NT_4_0) &&
		(OS!=OS_WIN32_WINDOWS_95) &&
		(OS!=OS_WIN32_WINDOWS_98) &&
		(OS!=OS_WIN32_WINDOWS_Me) )
	{
		if (TransparencyON) return FALSE;

		if (LoadUser32DLL==FALSE)
		{
			hUser32 = GetModuleHandle("USER32.DLL");
			LoadUser32DLL=TRUE;
		}
		if (!hUser32) return FALSE;

		SetWindowLong(hWnd,	GWL_EXSTYLE,GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
		SetLayeredWindowAttributes = (SLWA_FUNC)GetProcAddress(hUser32, "SetLayeredWindowAttributes");
		TransparencyON=TRUE;
		bOK=TRUE;
	}
	return bOK;
}
/*-----------------------------------------------------------------------------------*/
BOOL DisableTransparencyMode(HWND hWnd)
{
	BOOL bOK=FALSE;
	int OS=GetOSVersion();

	if ( (OS!=OS_WIN32_WINDOWS_NT_3_51) &&
		(OS!=OS_WIN32_WINDOWS_NT_4_0) &&
		(OS!=OS_WIN32_WINDOWS_95) &&
		(OS!=OS_WIN32_WINDOWS_98) &&
		(OS!=OS_WIN32_WINDOWS_Me) )
	{
			SetWindowLong(hWnd,	GWL_EXSTYLE,CS_HREDRAW | CS_VREDRAW);
			CurrentAlphaLevel=255;
			TransparencyON=FALSE;
			bOK=TRUE;
	}
	return bOK;
}
/*-----------------------------------------------------------------------------------*/
void ScilabFxFadeOut(void)
{
	LPTW lptw=GetTextWinScilab();
	int i=0;
	int OS=GetOSVersion();

	if ( (OS!=OS_WIN32_WINDOWS_NT_3_51) &&
		(OS!=OS_WIN32_WINDOWS_NT_4_0) &&
		(OS!=OS_WIN32_WINDOWS_95) &&
		(OS!=OS_WIN32_WINDOWS_98) &&
		(OS!=OS_WIN32_WINDOWS_Me) )
	{
		for (i=GetCurrentAlphaLevel();i>=0;i=i-16)
		{
			SetCurrentAlphaLevel(lptw->hWndParent ,i);
			SetCurrentAlphaLevel(lptw->hWndText ,i);
		}
	}
}
/*-----------------------------------------------------------------------------------*/
int GetCurrentAlphaLevel(void)
{
	return CurrentAlphaLevel;
}
/*-----------------------------------------------------------------------------------*/
void SetCurrentAlphaLevel(HWND hWnd ,int Alpha)
{
	int OS=GetOSVersion();

	if ( (OS!=OS_WIN32_WINDOWS_NT_3_51) &&
		(OS!=OS_WIN32_WINDOWS_NT_4_0) &&
		(OS!=OS_WIN32_WINDOWS_95) &&
		(OS!=OS_WIN32_WINDOWS_98) &&
		(OS!=OS_WIN32_WINDOWS_Me) )
	{
		if ( (Alpha>=0) && (Alpha<=255) )
		{
			
			SetLayeredWindowAttributes(hWnd, (COLORREF)NULL,CurrentAlphaLevel, LWA_ALPHA);
		}
		CurrentAlphaLevel=Alpha;
	}
}
/*-----------------------------------------------------------------------------------*/
BOOL IncreaseAlphaLevel(void)
{
	BOOL bOK=FALSE;
	LPTW lptw=GetTextWinScilab();
	int Alpha=GetCurrentAlphaLevel();

	if (Alpha==255)
	{
		DisableTransparencyMode(lptw->hWndParent);
		DisableTransparencyMode(lptw->hWndText);
		DragAcceptFiles (lptw->hWndParent, TRUE);
		InvalidateRect(lptw->hWndParent,NULL,TRUE);
		InvalidateRect(lptw->hWndText,NULL,TRUE);
	}
	else
	{
		if (Alpha<255)
		{
			SetCurrentAlphaLevel(lptw->hWndParent ,Alpha++);
			SetCurrentAlphaLevel(lptw->hWndText ,Alpha++);
			if (Alpha>255) Alpha=255;
		}
	}
	return bOK;
}
/*-----------------------------------------------------------------------------------*/
BOOL DecreaseAlphaLevel(void)
{
	BOOL bOK=FALSE;
	LPTW lptw=GetTextWinScilab();
	int Alpha=GetCurrentAlphaLevel();

	if (Alpha<0) Alpha=0;
	else
	{
		SetCurrentAlphaLevel(lptw->hWndParent ,Alpha--);
		SetCurrentAlphaLevel(lptw->hWndText ,Alpha--);
	}
	return bOK;
}
/*-----------------------------------------------------------------------------------*/