HOWTO: How to Draw a Gradient Background (128637)



The information in this article applies to:

  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows Software Development Kit (SDK) 3.1
  • Microsoft Win32 Application Programming Interface (API)

This article was previously published under Q128637

SUMMARY

This article provides source code for drawing a gradient background pattern similar to the one used in Microsoft Setup applications. The code will compile and run on Windows version 3.1, Win32s, Windows 95 and Windows NT.

MORE INFORMATION

WARNING: ANY USE BY YOU OF THE CODE PROVIDED IN THIS ARTICLE IS AT YOUR OWN RISK. Microsoft provides this code "as is" without warranty of any kind, either express or implied, including but not limited to the implied warranties of merchantability and/or fitness for a particular purpose.
   /*************************************************************

   *                                                            *
   *  DrawBackgroundPattern()                                   *
   *                                                            *
   *  Purpose: This function draws a gradient pattern that      *
   *           transitions between blue and black. This is      *
   *           similar to the background used in Microsoft      *
   *           setup programs.                                  *
   *                                                            *
   *************************************************************/ 

   void DrawBackgroundPattern(HWND hWnd)

   {
   HDC hDC = GetDC(hWnd);  // Get the DC for the window
   RECT rectFill;          // Rectangle for filling band
   RECT rectClient;        // Rectangle for entire client area
   float fStep;            // How large is each band?
   HBRUSH hBrush;

   int iOnBand;  // Loop index

   // How large is the area you need to fill?

   GetClientRect(hWnd, &rectClient);

   // Determine how large each band should be in order to cover the
   // client with 256 bands (one for every color intensity level)

   fStep = (float)rectClient.bottom / 256.0f;

   // Start filling bands

   for (iOnBand = 0; iOnBand < 256; iOnBand++) {

    // Set the location of the current band
    SetRect(&rectFill,
            0,                           // Upper left X
            (int)(iOnBand * fStep),      // Upper left Y
            rectClient.right+1,          // Lower right X
            (int)((iOnBand+1) * fStep)); // Lower right Y

   // Create a brush with the appropriate color for this band
   hBrush = CreateSolidBrush(RGB(0, 0, (255 - iOnBand)));

   // Fill the rectangle
   FillRect(hDC, &rectFill, hBrush);

   // Get rid of the brush you created
   DeleteObject(hBrush);

   };

   // Give back the DC

   ReleaseDC(hWnd, hDC);
   }
				

Modification Type:MinorLast Reviewed:3/7/2005
Keywords:kbhowto KB128637