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

More by Author

Must Read