65.9K
CodeProject is changing. Read more.
Home

Simple Way to Make Transparent Dialog

Aug 5, 2013

CPOL
viewsIcon

27290

downloadIcon

1749

Enable user to make a dialog transparent without making its child control transparent

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:

  1. 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.
  2. 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.