HOWTO: How to Shade Images to Look Like Windows 95 Active IconID: Q128786
|
This article shows by example how to display an image or an icon in a shaded state, as Windows 95 does for the active icon.
// ShadeRect
// hDC : the DC on which the area is to be shaded
// lpRect : the coordinates within which to shade
BOOL ShadeRect( HDC hDC, LPRECT lpRect )
{
COLORREF crHighlightColor, crOldBkColor, crOldTextColor;
HBRUSH hBrush, hOldBrush;
HBITMAP hBitmap, hBrushBitmap, hOldMemBitmap;
int OldBkMode, nWidth, nHeight;
HDC hMemDC;
RECT rcRect = { 0, 0, 0, 0};
// The bitmap bits are for a monochrome "every-other-pixel"
// bitmap (for a pattern brush)
WORD Bits[8] = { 0x0055, 0x00aa, 0x0055, 0x00aa,
0x0055, 0x00aa, 0x0055, 0x00aa };
// The Width and Height of the target area
nWidth = lpRect->right - lpRect->left + 1;
nHeight = lpRect->bottom - lpRect->top + 1;
// Need a pattern bitmap
hBrushBitmap = CreateBitmap( 8, 8, 1, 1, &Bits );
// Need to store the original image
hBitmap = CreateCompatibleBitmap( hDC, nWidth, nHeight );
// Need a memory DC to work in
hMemDC = CreateCompatibleDC( hDC );
// Create the pattern brush
hBrush = CreatePatternBrush( hBrushBitmap );
// Has anything failed so far? If so, abort!
if( (hBrushBitmap==NULL) || (hBitmap==NULL) ||
(hMemDC==NULL) || (hBrush==NULL) )
{
if( hBrushBitmap != NULL ) DeleteObject(hBrushBitmap);
if( hBitmap != NULL ) DeleteObject( hBitmap );
if( hMemDC != NULL ) DeleteDC( hMemDC );
if( hBrush != NULL ) DeleteObject( hBrush );
return FALSE;
}
// Select the bitmap into the memory DC
hOldMemBitmap = SelectObject( hMemDC, hBitmap );
// How wide/tall is the original?
rcRect.right = nWidth;
rcRect.bottom = nHeight;
// Lay down the pattern in the memory DC
FillRect( hMemDC, &rcRect, hBrush );
// Fill in the non-color pixels with the original image
BitBlt( hMemDC, 0, 0, nWidth, nHeight, hDC,
lpRect->left, lpRect->top, SRCAND );
// For the "Shutdown" look, use black or gray here instead
crHighlightColor = GetSysColor( COLOR_HIGHLIGHT );
// Set the color scheme
crOldTextColor = SetTextColor( hDC, crHighlightColor );
crOldBkColor = SetBkColor( hDC, RGB(0,0,0) );
SetBkMode( hDC, OPAQUE );
// Select the pattern brush
hOldBrush = SelectObject( hDC, hBrush );
// Fill in the color pixels, and set the others to black
FillRect( hDC, lpRect, hBrush );
// Fill in the black ones with the original image
BitBlt( hDC, lpRect->left, lpRect->top, nWidth, nHeight,
hMemDC, 0, 0, SRCPAINT );
// Restore target DC settings
SetBkMode( hDC, OldBkMode );
SetBkColor( hDC, crOldBkColor );
SetTextColor( hDC, crOldTextColor );
// Clean up
SelectObject( hMemDC, hOldMemBitmap );
DeleteObject( hBitmap );
DeleteDC( hMemDC );
DeleteObject( hBrushBitmap );
SelectObject( hDC, hOldBrush );
DeleteObject( hBrush );
return TRUE;
}
Additional query words: 4.00 hatch darken shadow
Keywords : kbNTOS351 kbNTOS400 kbSDKWin32 kbDSupport
Version : winnt:3.51,4.0
Platform : winnt
Issue type : kbhowto
Last Reviewed: June 28, 1999