Click here to Skip to main content
Click here to Skip to main content

Transparent Windows Support in Win 2000 and Win ME

By , 3 Aug 2002
 

Introduction

I always wondered how to make a window transparent so that all the clicks on the window filter down to the window underneath .At last Microsoft has provided support in Windows Me and 2000 for creating transparent windows . And alpha-blending (This support is not there in previous platforms). In previous platforms (Win 9x ) one could use SetWindowRgn to make only specified part of a window visible but creating a really transparent window wasn’t so easy .

So Lets get on with the code . The support added by Microsoft Lies in a new function named SetLayeredWindowAttributes . But before you can use this function you have to tell Windows that your window is a layered window . This causes Windows to internally allocate the buffers required for creating layered, translucent effects. The code for doing this is

SetWindowLong (hWnd , GWL_EXSTYLE , 
    GetWindowLong (hWnd , GWL_EXSTYLE ) | WS_EX_LAYERED ) ;

Here The hWnd is the handle to the window which has to be set transparent. GWL_EXSTYLE parameter is used for accessing and modifying the extended style of the window. WS_EX_LAYERED parameter is the window style for a layered window. If the compiler gives you an error of undefined variable WS_EX_LAYERED then define it as

# define WS_EX_LAYERED 0x80000 

After you have done this you can now call the magic function SetLayeredWindowAttributes. Let me show you the code snippet from the sample.

HWND hWnd=this->m_hWnd; 
typedef DWORD (WINAPI *PSLWA)(HWND, DWORD, BYTE, DWORD);
PSLWA pSetLayeredWindowAttributes;
HMODULE hDLL = LoadLibrary ("user32");
pSetLayeredWindowAttributes = 
    (PSLWA) GetProcAddress(hDLL,"SetLayeredWindowAttributes");
if (pSetLayeredWindowAttributes != NULL) {
    /*
    * Second parameter RGB(255,255,255) sets the colorkey 
    * to white LWA_COLORKEY flag indicates that color key 
    * is valid LWA_ALPHA indicates that ALphablend parameter 
    * (factor) is valid
    */
    pSetLayeredWindowAttributes (hWnd, 
        RGB(255,255,255), factor, LWA_COLORKEY|LWA_ALPHA);
}

The Code first loads the library User32.lib which defines the SetLayeredWindowAttributes function. It then gets the address of the function SetLayeredWindowattributes by using GetProcAddress. It checks if it has got a valid function pointer to ensure that it is not going to crash if run on platform other than Win 2000 and Win Me. It then calls the SetLayeredWindowAttributes Function .

Color Keys

Color Keys are a way of telling the Windows that which color to take as being transparent. Say if you set the Color Key to Blue and select LWA_COLORKEY flag in the SetLayeredWindowAttributes then wherever in you window Color Blue appears it will be taken as transparent and Windows will show whatever lies beneath that color.

Alpha Blend Factor

Alpha Blend factor that is the third parameter in SetLayeredWindowAttributes indicates and controls the degree of transparency. It has to be within range of 0 to 255 and you have to specify LWA_ALPHA flag in the fourth parameter to say that the Alpha Blend Factor is valid. When Alpha Blend factor is 0 then window is completely transparent and when it is 255 window is Opaque.

NOTE : You may have to define the two flags LWA_ALPHA and LWA_COLORKEY as

#define LWA_COLORKEY 1 
#define LWA_ALPHA 2 

in case of a compiler error. When Window is transparent all the clicks on the window go down to the window underneath it .

The Sample

The Sample program provided is very simple. It sets the Layered attribute of windows in OnInitDialog Function and then sets the timer to send WM_TIMER Messages to the window. In the OnTimer Function (The handler of WM_TIMER Message) Color key is set to white and Alpha-blend factor is varied from 0 to 255 and back to 0 to make the image appear and then disappear .

Acknowledgement

I really am thankful to all the articles written on transparent windows that I read before writing this one for CodeProject.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Quaker
Web Developer
United States United States
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralNo need for LoadLibrary/GetProcAddressmemberraufatay9 Nov '08 - 16:30 
GeneralIf the bakground application is windows media player,it can not be transparentmemberzseasoft13 Oct '07 - 22:24 
GeneralThanksmembermomomonet12 Mar '06 - 7:24 
QuestionFloodFill(...) doesn't work?memberqdzhulf16 Aug '05 - 17:04 
AnswerRe: FloodFill(...) doesn't work?memberY-30330 Jan '06 - 6:53 
Generalwin 2000 problemmemberG.A.12 Jun '05 - 22:09 
AnswerRe: win 2000 problemmemberY-30330 Jan '06 - 6:00 
GeneralStop saying in Win MEmemberGreenEye2oo419 Mar '05 - 10:28 
JokeRe: Stop saying in Win ME (correction)memberY-30330 Jan '06 - 5:38 
Generalwhy SetLayeredWindowAttributes can't used in 8bits(256) color qualitymemberwhizzkid@m28.hinet.net11 Aug '04 - 3:36 
AnswerRe: why SetLayeredWindowAttributes can't used in 8bits(256) color qualitymemberY-30330 Jan '06 - 5:44 
GeneralRe: why SetLayeredWindowAttributes can't used in 8bits(256) color qualitymemberasrelu30 Nov '07 - 6:47 
GeneralTransparent in Rich Edit Controlmemberzphuong29 Jun '04 - 18:41 
GeneralChild windowsmemberNeo4E656F2 Feb '03 - 16:54 
GeneralRe: Child windowssussAnonymous7 May '03 - 13:11 
GeneralRe: Child windowsmemberKonMan9 May '03 - 9:35 
GeneralRe: Child windowsmemberpeterburng726 Jun '05 - 16:13 
GeneralSkinned windowsmemberM.Mugunth Kumar11 Dec '02 - 14:58 
GeneralRe: Skinned windowsmemberNeo4E656F2 Feb '03 - 21:26 
QuestionCan stop Mouse clicks .?sussDILLIP6 Nov '02 - 18:22 
AnswerRe: Can stop Mouse clicks .?susshaha62425 Jan '05 - 2:40 
QuestionCan stop Mouse clicks .?sussDILLIP6 Nov '02 - 18:21 
GeneralWow!! Nice work!!memberAisha Ikram18 Sep '02 - 18:53 
GeneralNot in ME...sussAnonymous7 Aug '02 - 4:04 
GeneralEasier in VBsussAnonymous4 Aug '02 - 11:39 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130516.1 | Last Updated 4 Aug 2002
Article Copyright 2002 by Quaker
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid