Click here to Skip to main content
6,594,932 members and growing! (14,193 online)
Email Password   helpLost your password?
Platforms, Frameworks & Libraries » Win32/64 SDK & OS » General     Intermediate

Transparent Windows Support in Win 2000 and Win ME

By Quaker

If you want to make your window transparent but don't know how, here is the answer to your question
VC6, VC7Win2K, MFC, Dev
Posted:3 Aug 2002
Views:112,666
Bookmarked:30 times
Announcements
Loading...
 
Search    
Advanced Search
Add to IE Search
printPrint   add Share
      Discuss Discuss   Broken Article?Report  
25 votes for this article.
Popularity: 5.48 Rating: 3.92 out of 5

1

2

3
5 votes, 27.8%
4
13 votes, 72.2%
5

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


Member

Occupation: Web Developer
Location: United States United States

Other popular Win32/64 SDK & OS articles:

Article Top
You must Sign In to use this message board.
FAQ FAQ 
 
Noise Tolerance  Layout  Per page   
 Msgs 1 to 25 of 28 (Total in Forum: 28) (Refresh)FirstPrevNext
GeneralNo need for LoadLibrary/GetProcAddress Pinmemberraufatay17:30 9 Nov '08  
GeneralIf the bakground application is windows media player,it can not be transparent Pinmemberzseasoft23:24 13 Oct '07  
GeneralThanks Pinmembermomomonet8:24 12 Mar '06  
GeneralFloodFill(...) doesn't work? Pinmemberqdzhulf18:04 16 Aug '05  
AnswerRe: FloodFill(...) doesn't work? PinmemberY-3037:53 30 Jan '06  
Generalwin 2000 problem PinmemberG.A.23:09 12 Jun '05  
AnswerRe: win 2000 problem PinmemberY-3037:00 30 Jan '06  
GeneralStop saying in Win ME PinmemberGreenEye2oo411:28 19 Mar '05  
JokeRe: Stop saying in Win ME (correction) PinmemberY-3036:38 30 Jan '06  
Generalwhy SetLayeredWindowAttributes can't used in 8bits(256) color quality Pinmemberwhizzkid@m28.hinet.net4:36 11 Aug '04  
AnswerRe: why SetLayeredWindowAttributes can't used in 8bits(256) color quality PinmemberY-3036:44 30 Jan '06  
GeneralRe: why SetLayeredWindowAttributes can't used in 8bits(256) color quality Pinmemberasrelu7:47 30 Nov '07  
GeneralTransparent in Rich Edit Control Pinmemberzphuong19:41 29 Jun '04  
GeneralChild windows PinmemberNeo4E656F17:54 2 Feb '03  
GeneralRe: Child windows PinsussAnonymous14:11 7 May '03  
GeneralRe: Child windows PinmemberKonMan10:35 9 May '03  
GeneralRe: Child windows Pinmemberpeterburng717:13 26 Jun '05  
GeneralSkinned windows PinmemberM.Mugunth Kumar15:58 11 Dec '02  
GeneralRe: Skinned windows PinmemberNeo4E656F22:26 2 Feb '03  
GeneralCan stop Mouse clicks .? PinsussDILLIP19:22 6 Nov '02  
GeneralRe: Can stop Mouse clicks .? Pinsusshaha6243:40 25 Jan '05  
GeneralCan stop Mouse clicks .? PinsussDILLIP19:21 6 Nov '02  
GeneralWow!! Nice work!! PinmemberAisha Ikram19:53 18 Sep '02  
GeneralNot in ME... PinsussAnonymous5:04 7 Aug '02  
GeneralEasier in VB PinsussAnonymous12:39 4 Aug '02  

General General    News News    Question Question    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

PermaLink | Privacy | Terms of Use
Last Updated: 3 Aug 2002
Editor: Chris Maunder
Copyright 2002 by Quaker
Everything else Copyright © CodeProject, 1999-2009
Web20 | Advertise on the Code Project