Introduction
This is my first tip. I am writing a simple block of code to make a dialog transparent. I have seen many articles which make a dialog completely transparent with its child control too.
This tip uses a simple trick to make a transparent dialog without making its child controls transparent.
Using the Code
The idea behind making a transparent dialog is:
We can set the opacity and transparency color key of a layered window.
I used SetLayeredWindowAttributes
with LWA_COLORKEY
to replace a color with transparency, in order to achieve a transparent background.
The code that makes dialog is:
- Set the background color of the dialog which is not used in the application. I selected a color (e.g., RGB(1,11,21)) that is not present anywhere except in the dialog background.
- Set that color transparent using
SetLayeredWindowAttributes
with the LWA_COLORKEY
flag.
SetBackgroundColor(RGB(1,11,21));
LONG ExtendedStyle = GetWindowLong(GetSafeHwnd(),GWL_EXSTYLE );
SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,ExtendedStyle | WS_EX_LAYERED );
::SetLayeredWindowAttributes(GetSafeHwnd(),RGB(1,11,21),0,LWA_COLORKEY);
Paste the above code in the OnInitDialog()
function of your dialog class. Use Visual Studio 2010 and derive your dialog class from the CDialogEx
class.