Click here to Skip to main content
Click here to Skip to main content
Go to top

CGlassDialog

, 11 Aug 2006
Rate this:
Please Sign up or sign in to vote.
This is a simple class that makes transparent dialog boxes rise more smoothly.

Sample Image - CGlassDialog.jpg

Introduction

Before introducing this class, I want you to know my English is not very good. And, this is my first article. I've always got a lot of help from this site, so I really wanted to write an article and give back to the community.

Anyway, this is a simple class that makes transparent dialog boxes rise more smoothly. The reason why I made this is.. I've been making a program that has transparent windows. I thought if the windows could rise in more smoothly, it would be better visually. And I made up my mind to make this class.

How to make this??

It's so simple, I use an OnTimer() for the smooth rising.

First, you must declare this in your .h file:

#define WS_EX_LAYERED   0x00080000
#define LWA_COLORKEY    0x00000001
#define LWA_ALPHA       0x00000002
#define ULW_COLORKEY    0x00000001
#define ULW_ALPHA       0x00000002
#define ULW_OPAQUE      0x00000004

typedef BOOL(WINAPI *SLWA)(HWND, COLORREF, BYTE, DWORD); 

and then, you can use this code:

SLWA pSetLayeredWindowAttributes = NULL;  
HINSTANCE hmodUSER32 = LoadLibrary("USER32.DLL"); 
pSetLayeredWindowAttributes =(SLWA)GetProcAddress(hmodUSER32, 
           "SetLayeredWindowAttributes");
SetWindowLong(m_hWnd, GWL_EXSTYLE, 
           GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
pSetLayeredWindowAttributes(m_hWnd, 0, (255 * m_nGlass) / 100, LWA_ALPHA);

In this code, m_nGlass is the rating of transparency so you can set this from 0 to 100. (If you set m_nGlass to 0, the dialog box will be perfectly transparent. If you set m_nGlass to 100, the dialog box will not be transparent at all.)

I've used this point. OnTimer() is the event function of WM_TIMER, so it makes executes the function in regular intervals.

in OnTimer(), you change the value of m_nGlass:

(m_nGlass >= 70) ? ReleaseTimer() : m_nGlass += m_nStepUnit; 

How to use this??

If you want to use this class, first, add GlassiDialog.h and GlassDialog.cpp into your project and #include GlassDialog.h where needed. Then, inherit the CGlassDialog class in your dialog class. (I.e., you should change the base class in your dialog from CDialog to CGlassDialog. Just go to your .cpp, .h files and use the "Replace" feature of your code editor to replace all CDialog with CGlassDialog.)

Now, that's all! Your dialog class is ready to go. When you create your dialog object, you will be able to see a smooth rising dialog box.

Thank you for reading my article!! Smile | :)

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Youngman Park
Software Developer
Korea (Republic Of) Korea (Republic Of)
No Biography provided

Comments and Discussions

 
Questionyou rock buddy Pinmemberomkarpardeshi1237-Dec-11 3:55 
GeneralWell done PinmemberDr.Luiji29-Aug-07 22:13 
GeneralThank's PinmemberVaga15055-Dec-06 10:14 
GeneralAmazing Pinmembercodesen5-Nov-06 19:54 
GeneralA suggestion/request PinmemberPaolo Vernazza16-Aug-06 10:50 
GeneralRe: A suggestion/request PinmemberYoungman Park16-Aug-06 13:20 
QuestionGood Job: two more questions PinmemberGianniGP16-Aug-06 0:44 
AnswerRe: Good Job: two more questions PinmemberYoungman Park16-Aug-06 12:40 
yeah, here is my answer.
 
First, user32.h?? I think you mean winuser.h. Anyway The reason why I didn't use user32.lib is I failed using user32.lib.
 
I don't know why I failed using user32.lib but when I made this using user32.lib, I've got an LINK error like this "error LNK2001: unresolved external symbol __imp__SetLayeredWindowAttributes@16" well, surely I included winuser.h and user32.lib.
 
So I used a current way.
 

Second, You mean it doesn't work with modeless dialogs?? If you get the error 'GetLastError', It means that 'SetLayeredWindowAttributes' function fails.
 
If you send me e-mail with your source, I can help you. I think there is no problem to use with modeless Dialog. my e-mail is yucco@naver.com.
 

Thank you for your interest, GianniGP.
GeneralRe: Good Job: two more questions PinmemberGianniGP16-Aug-06 23:11 
AnswerRe: Good Job: two more questions PinmemberYoungman Park17-Aug-06 10:14 
GeneralRe: Good Job: two more questions PinmemberGianniGP17-Aug-06 22:57 
AnswerRe: Good Job: two more questions PinmemberYoungman Park19-Aug-06 22:05 
GeneralRe: Good Job: two more questions PinmemberGianniGP20-Aug-06 0:22 
GeneralRe: Good Job: two more questions PinmemberAnt Htoo Naing2-Aug-07 16:44 
Generalsolution to initial flicker Pinmemberjnapier10-Aug-06 10:46 
GeneralRe: solution to initial flicker PinmemberYoungman Park10-Aug-06 15:51 
Generalcool Pinmemberdavidoff8-Aug-06 2:58 
GeneralRe: cool PinmemberYoungman Park8-Aug-06 3:07 
Generalcreative [modified] Pinmemberpb967-Aug-06 21:11 
GeneralRe: creative [modified] PinmemberYoungman Park8-Aug-06 3:07 
QuestionYour Project Pinmembercoronys7-Aug-06 20:32 
AnswerRe: Your Project PinmemberYoungman Park8-Aug-06 3:04 
GeneralRe: Your Project Pinmembercoronys8-Aug-06 3:41 
AnswerRe: Your Project [modified] PinmemberYoungman Park8-Aug-06 3:55 
GeneralRe: Your Project Pinmembercoronys8-Aug-06 5:48 

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

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.140926.1 | Last Updated 12 Aug 2006
Article Copyright 2006 by Youngman Park
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid