| How to Shade Images to Look Like Windows 95 Active IconLast reviewed: September 29, 1995Article ID: Q128786 | 
| The information in this article applies to: 
 
 SUMMARYThis article shows by example how to display an image or an icon in a shaded state, as Windows 95 does for the active icon. 
 MORE INFORMATION
 Step-by-Step ProcedureTo obtain the shaded look for your image or icon, follow these six steps: 
 
 Sample CodeThe following function implements these six steps to shade a rectangular area on a device context: 
 // ShadeRect // hDC : the DC on which the area is to be shaded // lpRect : the coordinates within which to shadeBOOL 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 reference words: 4.00 hatch darken shadow 
 © 1998 Microsoft Corporation. All rights reserved. Terms of Use. |