Download source files - 13 Kb
Download executable (MFC DLLs required) - 5 Kb
When I checked the newly available APIs for Windows 2000, I ran into layered windows, and after playing around with it for a while, I finally wrote this cute little program. It allows you to add transparency to any window, just by clicking on it with your mouse.
The core functionality is done in only 4 lines of code (6 if you include variable definitions). The rest is just wizard-generated MFC code.
HWND hWnd;
POINT pt;
::GetCursorPos(&pt);
hWnd=::WindowFromPoint(pt);
SetWindowLong(hWnd,GWL_EXSTYLE,GetWindowLong(hWnd,GWL_EXSTYLE)^WS_EX_LAYERED);
SetLayeredWindowAttributes(hWnd,RGB(0,0,0),m_slider.GetPos(),LWA_ALPHA);
First it finds the window under the current cursor position by using GetCursorPos()
and WindowFromPoint
, then it toggles its WS_EX_LAYERED
(new in W2k) style using SetWindowLong
, and
finally, it sets its transparency to a value (between 0 and 255) defined by a slider control.
The new SetLayeredWindowAttributes
function is available only on Windows 2000, and is well-documented
in the current MSDN library. You can also use it for color-keying, i.e. to make pixels of a specific color completely transparent,
while leaving other pixels unchanged. The two effects can also be combined.
SetLayeredWindowAttributes
is defined as follows:
BOOL SetLayeredWindowAttributes(
HWND hwnd,
COLORREF crKey,
BYTE bAlpha,
DWORD dwFlags
);
SetLayeredWindowAttributes
can also be used to fade in/out other windows, or to create irregularly formed windows (this was also possible using window regions, but that was much slower).
I personally use this program to make my Taskbar, ICQ and Winamp windows transparent, since these are always on top, and I prefer being able to see what happens behind them.
Have Fun!