CLayeredWindowHelperST v1.0 – A wrapper class for transparent windows

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

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

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read