CLayeredWindowHelperST v1.0 - A wrapper class for transparent windows

Sample Image

SoftechSoftware homepage
SoftechSoftware Email

Environment: VC++ 6.0, XP, Win2k, NT 4.0, Win9x/ME

Abstract

CLayeredWindowHelperST is a wrapper class of all required APIs to add support for transparent (layered) windows to your applications. This is a scalable class. If running under Windows 2000/XP your windows will have the selected transparent effect, while if running under Windows 9x/ME/NT will run error-less.

How to integrate CLayeredWindowHelperST in your application

In your project include the following files:

  • LayeredWindowHelperST.h
  • LayeredWindowHelperST.cpp
Create a instance of CLayeredWindowHelperST. This class encapsulates all the required APIs to support transparent windows and to run error-less if running under a old Windows version that doesn't support this feature. You need only one instance, so this can be global to the application.
CLayeredWindowHelperST G_Layered;
Modify the style of your window, then set the transparency effect. For dialog-based applications, in your OnInitDialog:
// Call the base-class method
CDialog::OnInitDialog();

// Modify the style
G_Layered.AddLayeredStyle(m_hWnd);

// Set the trasparency effect to 70%
G_Layered.SetTransparentPercentage(m_hWnd, 70);
-or-
G_Layered.SetLayeredWindowAttributes( m_hWnd, 
                                      0,
                                      210,
                                      LWA_ALPHA);

Class methods

AddLayeredStyle
Adds the WS_EX_LAYERED style to the specified window.
This style is required to have a transparent effect.

// Parameters:
//     [IN]   Handle to the window and, indirectly, the 
//             class to which the window belongs. 
//            Windows 95/98/Me: The AddLayeredStyle function 
//             may fail if the window 
//            specified by the hWnd parameter does not belong
//             to the same process as the calling thread. 
//
// Return value:
//     Non zero
//            Function executed successfully.
//     Zero
//            Function failed. To get extended error 
//            information, call ::GetLastError().
//
LONG AddLayeredStyle(HWND hWnd)
SetLayeredWindowAttributes
Sets the opacity and transparency color key of a transparent (layered) window.
// Parameters:
//     [IN]   hWnd
//            Handle to the layered window.
//     [IN]   crKey
//            A COLORREF value that specifies the transparency 
//             color key to be used when
//            composing the layered window. All pixels painted 
//             by the window in this color will be transparent.
//            To generate a COLORREF, use the RGB() macro.
//     [IN]   bAlpha
//            Alpha value used to describe the opacity of the 
//             layered window.
//            When bAlpha is 0, the window is completely 
//             transparent.
//            When bAlpha is 255, the window is opaque. 
//     [IN]   dwFlags 
//            Specifies an action to take. This parameter can 
//             be one or more of the following values:
//               LWA_COLORKEY  Use crKey as the transparency 
//                             color.
//               LWA_ALPHA     Use bAlpha to determine the 
//                             opacity of the layered window.
//
// Return value:
//     TRUE
//            Function executed successfully.
//     FALSE
//            Function failed. To get extended error 
//             information, call ::GetLastError().
//
BOOL SetLayeredWindowAttributes( HWND hWnd, 
                                 COLORREF crKey, 
                                 BYTE bAlpha, 
                                 DWORD dwFlags)
SetTransparentPercentage
Sets the percentage of opacity or transparency of a layered window.
// Parameters:
//     [IN]   hWnd
//            Handle to the layered window.
//     [IN]   byPercentage
//            Percentage (from 0 to 100)
//
// Return value:
//     Non zero
//            Function executed successfully.
//     Zero
//            Function failed. To get extended error 
//            information, call ::GetLastError().
//
BOOL SetTransparentPercentage( HWND hWnd, 
                               BYTE byPercentage)
GetVersionI
Returns the class version as a short value.
// Return value:
//     Class version. Divide by 10 to get actual version.
//
static short GetVersionI()
GetVersionC
Returns the class version as a string value.
// Return value:
//     Pointer to a null-terminated string 
//      containing the class version.
//
static LPCTSTR GetVersionC()

Remarks

To compile CLayeredWindowHelperST you need the Platform SDK (August 2001 or newer). This is not
mandatory because at compile-time, if not found, it will be emulated. At run-time you don't need any
additional SDK or libraries installed.

History

  • v1.0 (17/January/2002)
    First release